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方法中给赋值。要不然失效解析不出来,他是在之前赋值的,所以还没有解析相当于赋值无效。
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值