Go中Flag包的使用
Posted 星际迷航‖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go中Flag包的使用相关的知识,希望对你有一定的参考价值。
flag包实现了命令行参数的解析。
StringVar用指定的名称、默认值、使用信息注册一个string类型flag,并将flag的值保存到p指向的变量。
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
BoolVar用指定的名称、默认值、使用信息注册一个bool类型flag,并将flag的值保存到p指向的变量。
func BoolVar(p *bool, name string, value bool, usage string)
IntVar用指定的名称、默认值、使用信息注册一个int类型flag,并将flag的值保存到p指向的变量。
func IntVar(p *int, name string, value int, usage string)
Float64Var用指定的名称、默认值、使用信息注册一个float64类型flag,并将flag的值保存到p指向的变量。
func Float64Var(p *float64, name string, value float64, usage string)
Var方法使用指定的名字、使用信息注册一个flag。该flag的类型和值由第一个参数表示,该参数应实现了Value接口。例如,用户可以创建一个flag,可以用Value接口的Set方法将逗号分隔的字符串转化为字符串切片。
func Var(value Value, name string, usage string)
Int用指定的名称、默认值、使用信息注册一个int类型flag。返回一个保存了该flag的值的指针。
func Int(name string, value int, usage string) *int
从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。
func Parse()
使用代码的示例
package main
import (
"flag"
"fmt"
"strings"
)
type interval []string
// 实现String()方法
func (h *interval) String() string
return fmt.Sprintf("%v", *h)
// Set 方法
func (h *interval) Set(s string) error
for _, v := range strings.Split(s, ",")
*h = append(*h, v)
return nil
var (
name string
delete bool
age int
score float64
id *int
intervalFlag interval
)
// go中内置函数在main方法之前执行
func init()
flag.StringVar(&name, "names", "Tome", "姓名")
flag.BoolVar(&delete, "d", false, "是否删除")
flag.IntVar(&age, "age", 18, "年龄")
flag.Float64Var(&score, "score", 60.0, "成绩")
flag.Var(&intervalFlag, "cxc", "123")
id = flag.Int("id", 0, "用户id")
func main()
flag.Parse()
if delete
fmt.Println("删除")
else
fmt.Println("默认不删除")
fmt.Println("name: ", name)
fmt.Println("age: ", age)
fmt.Println("score:", score)
fmt.Println("id: ", *id)
fmt.Println(flag.Args())
fmt.Println(intervalFlag)
如上方法中value 就是这个对应值的默认值,flag.Args()千万不能在init方法中给赋值。要不然失效解析不出来,他是在之前赋值的,所以还没有解析相当于赋值无效。
以上是关于Go中Flag包的使用的主要内容,如果未能解决你的问题,请参考以下文章