Go flag库

2025-04-30T08:03:00

在 Go 语言中,flag 是一个用于解析命令行参数的标准库。通过这个库,你可以很方便地从命令行中获取用户传入的参数,比如字符串、整数、布尔值等。

主要用途:

处理命令行参数,例如:

go run main.go -name=Tom -age=25 -debug=true

基本使用示例:

package main

import (
    "flag"
    "fmt"
)

func main() {
    // 定义命令行参数
    name := flag.String("name", "default", "请输入用户名")
    age := flag.Int("age", 18, "请输入年龄")
    debug := flag.Bool("debug", false, "是否开启调试模式")

    // 解析命令行参数
    flag.Parse()

    fmt.Println("name:", *name)
    fmt.Println("age:", *age)
    fmt.Println("debug:", *debug)
}

常用函数:

函数用途
flag.String(name, default, usage)定义字符串参数
flag.Int(name, default, usage)定义整数参数
flag.Bool(name, default, usage)定义布尔参数
flag.Parse()开始解析命令行参数
flag.Args()获取非 flag 的参数
flag.NArg()获取非 flag 参数个数

需要注意,flag 默认只支持 -key=value-key value 的形式,不支持 --key 的双横线写法(这在某些 CLI 工具中是常见的)。

使用上面的写法获取到的变量是一个指针,所以在访问的时候如果要访问对应的值需要在变量之前加一个*号

如果想要直接得到变量也可以是用下面这种写法

var name string
flag.StringVar(&name, "name", "default", "请输入用户名")

这种写法是自己定义一个变量,然后将它的地址传进去


flag 后面的提示文字(也叫 usage 或说明文本)会在以下几种情况下自动显示:

1. 用户执行程序时传入了 h-help

这是最常见的触发方式,flag 包会自动帮你注册 -h--help 参数,触发时会显示所有参数的说明信息。例如:

go run main.go -h

输出会像这样:

Usage of /tmp/go-build.../main:
  -age int
        请输入年龄 (default 18)
  -debug
        是否开启调试模式 (default false)
  -name string
        请输入用户名 (default "default")

2. 程序中手动调用 flag.Usage()

你可以在代码里手动触发帮助信息显示,例如参数验证失败时:

if *name == "" {
    fmt.Println("name 参数不能为空")
    flag.Usage()
    os.Exit(1)
}

3. 覆盖默认的帮助输出内容(可选)

你也可以自定义 flag.Usage 的行为,比如美化输出:

flag.Usage = func() {
    fmt.Println("用法说明:")
    fmt.Println("  -name string    请输入用户名 (默认值:default)")
    fmt.Println("  -age int        请输入年龄 (默认值:18)")
    fmt.Println("  -debug          是否开启调试模式 (默认值:false)")
}

总结一下:

方式是否自动显示帮助信息
运行时使用 -h--help✅ 自动显示
手动调用 flag.Usage()✅ 手动触发
用户没有传必要参数❌ 不会自动显示(需要你手动判断并触发)
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »