美文网首页
go flag包使用

go flag包使用

作者: leejnull | 来源:发表于2020-01-08 22:25 被阅读0次

Go是怎么接受外部的命令行参数的?

在Python中有 sys 模块下的 sys.args 可以获取命令行列表,与之对应的,Go 也有一个 flag 包来获取

使用 flag 包获取参数需要哪几个步骤?

  1. 导入 flag 包
  2. 初始化变量用来存储外部的命令
  3. flag 包的配置工作,比如要接收哪些参数等等
  4. 在前面的准备工作做完之后,要在最后阶段 flag.Parse()
import (
    "flag"
)

var name string

func init() {
    flag.StringVar(&name, "name", "everyone", "The greeting object.")
}

func main() {
    // Parse 函数必须放在变量声明和 flag 设置之后调用
    flag.Parse()
    fmt.Printf("Hello, %s!\n", name)
}

flal.StringVar 接收4个参数

  1. 用于存储该命令参数的值的地址
  2. 获取的外部命令参数的名称
  3. 在未追加该命令参数的默认值
  4. 该命令的简短说明,在 go run xx.go --help 时会输出

name 的赋值方式,除了上面的 StringVar 之外,还有一个 String 函数也可以

// 通过返回值的方式
var name = flag.String("name", "everyone", "The greeting object.")

设置完,这样调用就完成了一个最简单的读取命令行参数的功能

go run test.go -name=Lee
// >> Hello, Lee!

// 没有指定 name 参数,会输出默认值 everyone
go run test.go
// >> Hellp, everyone!

// 指定了没有配置的参数,会报错,这个报错的形式如果没有指明的话,就会采取默认的说明
go run test.go -a=1
>>  flag provided but not defined: -a
    Usage of question:
      -name string
            The greeting object. (default "everyone")
    exit status 2

// 这里就用到了 StringVar / String 的第三和第四个参数了
如果我们想自定义说明呢?

很简单,只要实现 flag.Usage 函数就行了

flag.Usage = func() {
    fmt.Fprintf(os.Stderr, "usage of %s:\n这是我自定义的输出信息\n", "question")
    flag.PrintDefaults()
}

这时候调用

>> go run test.go --help

输出信息

Usage of question:
这是我自定义的信息
  -name string
        The greeting object. (default "everyone")
exit status 2

变量名、描述、默认值是固定不变的,但是上面的信息可以自定义

上面在调用 StringVar、Parse 等等的函数的时候。实际上是在调用 flag.CommandLine 变量的对应方法

// flag.ExitOnError 表示是以什么样的形式推出程序,还有 flag.PanicOnError
flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
flag.CommandLine.Usage = func() {
    fmt.Fprintf(os.Stderr, "Ueage of %s\n", "question")
    flag.PrintDefaults()
}

// 创建自己私有的命令参数容器
var cmdLine = flag.NewFlagSet("question", flag.ExitOnError)

// 用自己自定义的命令参数
cmdLine.StringVar(&name, "name", "everyone", "The greeting object.")

cmdLine.Parse(os.Args[1:]) // [1:]第一个元素是文件本身,所以要从1开始

以上关于flag的使用只是做一些简单介绍,具体的大家可以去看一下官方文档做深入了解

来自 https://leejnull.github.io/2019/08/21/2019-08-21/

相关文章

  • Go标准库flag使用

    Go语言标准库flag基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简...

  • go flag包使用

    Go是怎么接受外部的命令行参数的? 在Python中有 sys 模块下的 sys.args 可以获取命令行列表,与...

  • Golang获取命令行参数

    使用os.Args获取命令行参数 终端命令:go run main.go 20 马超 true 20 使用flag...

  • Go-flag包解析

    简介 godoc-flag 标准库-命令行参数解析flag cobra-解析命令 功能:flag实现命令行解析 使...

  • 一键解决 go get golang.org/x 包失败

    问题描述 当我们使用 go get、go install、go mod 等命令时,会自动下载相应的包或依赖包。但由...

  • xff_referer

    bp抓包,添加XFF如图所示 又说必须来Google,添加referer如图所示,go得到flag

  • 模板的使用

    模版 Go模板使用 在Go语言中,我们使用template包来进行模版处理,使用类似Parse,ParseFile...

  • 02.手撕Go语言-基础

    第一个Go程序 解读: a. package Go源文件开头必须使用package声明代码所属包,包是Go代码分发...

  • go http 包练习

    参见:下载包 设置代理妈的,下载包有时能下,有时候就卡住。手动安装包使用 go module 管理包 go-mod...

  • Golang 命令行 os.Args 和 flag包

    参考Go语言-命令行参数(os.Args, flag包) 大部分Go程序都是没有UI的,运行在纯命令行的模式下,该...

网友评论

      本文标题:go flag包使用

      本文链接:https://www.haomeiwen.com/subject/pxreactx.html