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包的使用的主要内容,如果未能解决你的问题,请参考以下文章

Go中Flag包的使用

Go语言标准库之命令行参数的解析:flag 库详解

Go语言标准库之命令行参数的解析:flag 库详解

『GoLang』fmt包的使用

Go语言-获取命令行参数

Go_16:GoLang中flag标签使用