flag
Golang 标准库 - flag
flag 包实现了命令行参数的解析。需要声明的参数通过
flag.String()、flag.Int() 等函数定义。
主要功能说明:
-
定义参数:
String()字符串参数Int()整数参数Bool()布尔参数Duration()时间间隔参数
-
解析参数:
Parse()解析命令行参数Args()获取非标志参数NArg()获取非标志参数数量
-
自定义 FlagSet:
NewFlagSet()创建独立的标志集合- 用于子命令实现
-
帮助信息:
- 自动生成帮助信息
-h或--help显示帮助
func main() {
// 1. 定义命令行参数
// 格式: flag.类型(名称, 默认值, 帮助信息)
name := flag.String("name", "World", "a name to say hello to")
age := flag.Int("age", 0, "your age")
verbose := flag.Bool("v", false, "verbose output")
// 使用 flag.Duration 解析时间间隔
timeout := flag.Duration("timeout", 5*time.Second, "connection timeout")
// 2. 解析命令行参数
flag.Parse()
// 3. 使用参数
fmt.Printf("Hello, %s!\n", *name)
fmt.Printf("Age: %d\n", *age)
fmt.Printf("Timeout: %v\n", *timeout)
if *verbose {
fmt.Println("Verbose mode enabled")
}
// 4. 获取非标志参数
fmt.Printf("Non-flag arguments: %v\n", flag.Args())
fmt.Printf("Number of non-flag arguments: %d\n", flag.NArg())
}
// 运行示例:
// go run main.go -name=Alice -age=30 -v -timeout=10s arg1 arg2
// 高级示例:自定义 FlagSet 实现子命令
type SubCommand struct {
fs *flag.FlagSet
name string
}
func NewSubCommand(name string) *SubCommand {
return &SubCommand{
fs: flag.NewFlagSet(name, flag.ContinueOnError),
name: name,
}
}
func (s *SubCommand) Parse(args []string) error {
return s.fs.Parse(args)
}
func (s *SubCommand) Name() string {
return s.name
}
// 使用示例
func SubCommandDemo() {
if len(os.Args) < 2 {
fmt.Println("Usage: program <command> [options]")
fmt.Println("Commands: serve, version")
os.Exit(1)
}
switch os.Args[1] {
case "serve":
port := flag.String("port", "8080", "server port")
flag.CommandLine.Parse(os.Args[2:])
fmt.Printf("Starting server on port %s\n", *port)
case "version":
fmt.Println("Version 1.0.0")
default:
fmt.Printf("Unknown command: %s\n", os.Args[1])
}
}
🛒 站长推荐(京东联盟)
- 《Go 程序设计语言》(Go 语言圣经,机械工业出版社) —— Go 官方团队出品,公认入门第一书
- 《Go 语言实战》(异步图书,人民邮电出版社) —— 实战导向,面试前巩固工程手感
- 《Go 语言编程之旅:一起用 Go 做项目》(博文视点,电子工业出版社) —— 项目驱动入门,从零写出完整应用
- Keychron K1Max 矮轴机械键盘(Mac/Win 双系统,QMK/VIA 开源改键) —— 轻薄矮轴 + 开源固件,程序员桌面常客
- 罗技 MX Master 3S 无线鼠标(Flow 跨屏,静音电磁滚轮) —— 人体工学设计,写代码一整天手不酸
以上链接含京东联盟推广代码;通过链接购买本站可能获得少量佣金,不影响你的购买价格。