前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go-标准库-flag(二)

Go-标准库-flag(二)

原创
作者头像
堕落飞鸟
发布2023-04-22 08:59:48
2590
发布2023-04-22 08:59:48
举报
文章被收录于专栏:飞鸟的专栏

自定义命令行参数解析

如果默认的命令行参数解析方式无法满足需求,我们可以使用 flag.Value 接口来自定义命令行参数解析。flag.Value 接口定义了 Set(string) errorString() string 两个方法,分别用于设置参数值和获取参数值的字符串表示。我们只需要实现这两个方法,就可以创建自己的命令行参数类型。

下面是一个示例,我们使用 flag.Value 接口来创建一个自定义命令行参数类型:

代码语言:javascript
复制
package main

import (
	"flag"
	"fmt"
	"strconv"
)

type myDuration float64

func (d *myDuration) Set(value string) error {
	val, err := strconv.ParseFloat(value, 64)
	if err != nil {
		return fmt.Errorf("invalid duration %q", value)
	}
	*d = myDuration(val)
	return nil
}

func (d *myDuration) String() string {
	return fmt.Sprintf("%f", *d)
}

func main() {
	var delay myDuration

	flag.Var(&delay, "delay", "delay time")

	flag.Parse()

	fmt.Println("delay:", delay)
}

在上面的示例代码中,我们创建了一个名为 myDuration 的类型,并实现了 flag.Value 接口的两个方法。在 Set() 方法中,我们将传入的字符串转换为浮点数,并将其赋值给 myDuration 变量。如果转换失败,我们返回一个错误。在 String() 方法中,我们将 myDuration 变量转换为字符串。

然后,我们使用 flag.Var() 函数将 delay 变量与 -delay 选项绑定在一起。由于 delay 变量的类型是 myDuration,因此我们需要将其传递给 flag.Var() 函数。

下面是一些命令行示例:

代码语言:javascript
复制
$ go run main.go -delay 1.5
delay: 1.500000
代码语言:javascript
复制
$ go run main.go -delay foo
invalid duration "foo"
Usage of /tmp/go-build1264960812/b001/exe/main:
  -delay duration
        delay time
exit status 2

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义命令行参数解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档