当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


GO Value用法及代码示例


GO语言"flag"包中"Value"类型的用法及代码示例。

值是存储在标志中的动态值的接口。 (默认值表示为字符串。)

如果 Value 有一个返回 true 的 IsBoolFlag() bool 方法,则 命令行 解析器使 -name 等效于 -name=true 而不是使用下一个 命令行 参数。

对于存在的每个标志,按命令行顺序调用一次 Set。 flag 包可以调用带有 zero-valued 接收器的 String 方法,例如 nil 指针。

用法:

type Value interface {
    String() string
    Set(string) error
}

例子:

package main

import (
	"flag"
	"fmt"
	"net/url"
)

type URLValue struct {
	URL *url.URL
}

func (v URLValue) String() string {
	if v.URL != nil {
		return v.URL.String()
	}
	return ""
}

func (v URLValue) Set(s string) error {
	if u, err := url.Parse(s); err != nil {
		return err
	} else {
		*v.URL = *u
	}
	return nil
}

var u = &url.URL{}

func main() {
	fs := flag.NewFlagSet("ExampleValue", flag.ExitOnError)
	fs.Var(&URLValue{u}, "url", "URL to parse")

	fs.Parse([]string{"-url", "https://golang.org/pkg/flag/"})
	fmt.Printf(`{scheme: %q, host: %q, path: %q}`, u.Scheme, u.Host, u.Path)

}

输出:

{scheme: "https", host: "golang.org", path: "/pkg/flag/"}

相关用法


注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 Value。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。