如何使用go做命令行flag解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 如何使用go做命令行flag解析

Using Command Line Flags in Go

Go有很多方式去处理CLIflags,第一种方式就是不适用任何库,使用os.Args检测。第二种方式是去使用标准库flag,第三种方式就是使用众多第三方CLI库之一,比如Cobra。

这次的内容主要讨论第二种方式,使用标准库flag,因为它在os.Args之上提供了诸多未处理的语法分析的便利,它还是内建的。在使用前 import "flag"

接受一个int类型参数:

func Int(name string, value int, usage string) *int
var count = flag.Int("count", 5, "the count of items")
fmt.Println("count value ", *count)

第一个参数是flag名字当使用在CLI中,第二个参数是默认值,第三个对于该参数的描述

flag.IntVar()提供了一种可以替换的语法

func IntVar(p *int, name string, value int, usage string)
var count int
flag.IntVar(&count, "count", 5, "the count of items")
fmt.Println("count value ", count)

这里参数发生了变化,第一个参数变成了变量的引用

两者主要的差别就是第一个用例中你得到的是一个指针,第二个用例你得到的是一个值

flag提供了许多方法去分析不同的flag类型,你可以用他们处理每一种你想接受的类型。

func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func Int(name string, value int, usage string) *int
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func IntVar(p *int, name string, value int, usage string)
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Uint(name string, value uint, usage string) *uint
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func UintVar(p *uint, name string, value uint, usage string)

传递错误的数据类型会引发error,暂停程序,还会将所需的用法打印给用户。

如何去设置flag?

只需要将- flagname加入到CLI命令中,有四种等效的语法:

-count=x
-count x
--count=x
--count x

你可以向命令传递任意数量的flag,但是如果flag包认不出你传递的flag它也会对停止对其它flag的解析,这意味着如果你还有其他非flag的参数,一定要在开始时,先使用所有的flag参数,避免flag包停止解析。

解析flags:

在你定义好所有的flags之后,你需要去调用

flag.Parse()

这样才能真正的解析他们

Boolean flags

Boolean flags设置的方法很简单,只需要加-count,这会让boollean flag得到true的值,如果设置false的值,可以使用-count=false。下面的值用于设置boolean flags都是有效的:

1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False.

在实际生产环境中,许多时候经常会看到CIL应用接受一个带有描述性名称的标志,以及同一个带有字母缩写的标志,你可以通过提供两个handler来实现:

var gopherType string

func init() {
    const (
        defaultGopher = "pocket"
        usage         = "the variety of gopher"
    )
    flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
    flag.StringVar(&gopherType, "g", defaultGopher, usage+" (shorthand)")
}

what's next?

下一步还能做什么,你可以更深层次的去研究下去,像别的CLI命令那样,开发一些子命令,甚至还可以开发一个简单的CLI工具通过Go语言。

reference


相关文章
|
5天前
|
安全 测试技术 Go
Go语言中的并发编程模型解析####
在当今的软件开发领域,高效的并发处理能力是提升系统性能的关键。本文深入探讨了Go语言独特的并发编程模型——goroutines和channels,通过实例解析其工作原理、优势及最佳实践,旨在为开发者提供实用的Go语言并发编程指南。 ####
|
10天前
|
Go
|
2月前
|
Python
命令行解析工具 argparse
命令行解析工具 argparse
46 14
|
2月前
|
Go
Go to Learn Go之命令行参数
Go to Learn Go之命令行参数
31 8
|
2月前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
3月前
|
存储 安全 程序员
|
Linux Shell Go
gocommand:一个跨平台的golang命令行执行package
    最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command.     但是如果直接使用原生exec.
2932 0
|
4天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
|
3天前
|
Ubuntu 编译器 Linux
go语言中SQLite3驱动安装
【11月更文挑战第2天】
19 7
|
3天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
20 5

推荐镜像

更多
下一篇
无影云桌面