命令行应用之flag包

1、 flag 基本使用和长短选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
 
import (
    "flag"
    "fmt"
)
 
func main() {
    var name string
    flag.StringVar(&name, "name", "Go 语言编程之旅", "帮助信息")
    flag.StringVar(&name, "n", "Go 语言编程之旅", "帮助信息")
    flag.Parse()
 
    fmt.Printf("name: %s", name)
}

  

2、子命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main
 
import (
    "flag"
    "fmt"
)
 
var name string
 
func main() {
    flag.Parse()
 
    args := flag.Args()
    if len(args) <= 0 {
        return
    }
 
    switch args[0] {
    case "go":
        goCmd := flag.NewFlagSet("go", flag.ExitOnError)
        goCmd.StringVar(&name, "name", "Go 语言", "帮助信息")
        _ = goCmd.Parse(args[1:])
    case "php":
        phpCmd := flag.NewFlagSet("php", flag.ExitOnError)
        phpCmd.StringVar(&name, "n", "PHP 语言", "帮助信息")
        _ = phpCmd.Parse(args[1:])
    }
 
    fmt.Printf("name: %s", name)
}

注意:这里需要特别注意的是 flag.NewFlagSet 方法的第二个参数是 ErrorHandling,用于指定处理异常错误的情况处理,其内置提供以下三种模式:

1
2
3
4
5
6
7
8
const (
    // 返回错误描述
    ContinueOnError ErrorHandling = iota
    // 调用 os.Exit(2) 退出程序
    ExitOnError      
    // 调用 panic 语句抛出错误异常
    PanicOnError                      
)

  

 

posted @   ☞@_@  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示