ZBLOG

golang flag

在 Go 语言中,flag 包是用于解析命令行参数的标准库工具。它提供了一种简单的方式来定义和解析命令行标志(flags),适用于开发 CLI(Command-Line Interface)工具或需要动态配置的程序。


基本用法示例

package main

import (
	"flag"
	"fmt"
)

func main() {
	// 定义命令行参数
	var (
		name    = flag.String("name", "Guest", "输入用户名")
		age     = flag.Int("age", 0, "输入年龄")
		verbose = flag.Bool("v", false, "启用详细模式")
	)

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

	// 使用参数
	fmt.Printf("Name: %s, Age: %d\n", *name, *age)
	if *verbose {
		fmt.Println("Verbose mode enabled.")
	}
}

运行方式

go run main.go -name Alice -age 25 -v

输出:

Name: Alice, Age: 25
Verbose mode enabled.

核心功能

  1. 定义参数

    • flag.String(name, default, description):字符串类型。
    • flag.Int(name, default, description):整数类型。
    • flag.Bool(name, default, description):布尔类型。
    • 其他类型如 Float64Duration 等也支持。
  2. 自定义变量绑定
    可以将参数绑定到已定义的变量:

    var port int
    flag.IntVar(&port, "port", 8080, "服务端口号")
    
  3. 解析参数
    flag.Parse():必须调用此方法才能生效,否则所有标志保持默认值。

  4. 非标志参数
    通过 flag.Args() 获取未被解析的额外参数(非 -flag 形式):

    args := flag.Args() // []string 类型
    
  5. 帮助信息
    自动生成帮助文档(通过 -h--help):

    go run main.go -h
    

高级用法

  1. 子命令模式
    类似 git commitdocker run,使用 flag.NewFlagSet(): “`go addCmd := flag.NewFlagSet(“add”, flag.ExitOnError) name := addCmd.String(“name”, “”, “资源名称”)

if len(os.Args) > 1 && os.Args[1] == “add” {

   addCmd.Parse(os.Args[2:])
   fmt.Println(*name)

}


2. **自定义验证**  
   在调用 `Parse()` 后检查参数的合法性:
   ```go
   if *port < 0 || *port > 65535 {
       log.Fatal("端口号无效")
   }
  1. 覆盖默认帮助信息
    修改 flag.Usage: “`go flag.Usage = func() { fmt.Fprintf(flag.CommandLine.Output(), “Usage of %s:\n”, os.Args[0]) flag.PrintDefaults() fmt.Println(“\n示例: ./app -name=Bob”) }


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23852

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?