命令行子命令 - Go by Example 中文版
文章推薦指數: 80 %
go 和 git 这种命令行工具,都有很多的子命令。
并且每个工具都有一套自己的flag,比如: go build 和 go get 是 go 里面的两个不同的子命令。
flag 包让我们可以轻松 ...
GobyExample中文版:命令行子命令
go和git这种命令行工具,都有很多的子命令。
并且每个工具都有一套自己的flag,比如:
gobuild和goget是go里面的两个不同的子命令。
flag包让我们可以轻松的为工具定义简单的子命令。
packagemain
import(
"flag"
"fmt"
"os"
)
funcmain(){
我们使用NewFlagSet函数声明一个子命令,
然后为这个子命令定义一个专用的flag。
fooCmd:=flag.NewFlagSet("foo",flag.ExitOnError)
fooEnable:=fooCmd.Bool("enable",false,"enable")
fooName:=fooCmd.String("name","","name")
对于不同的子命令,我们可以定义不同的flag。
barCmd:=flag.NewFlagSet("bar",flag.ExitOnError)
barLevel:=barCmd.Int("level",0,"level")
子命令应作为程序的第一个参数传入。
iflen(os.Args)<2{
fmt.Println("expected'foo'or'bar'subcommands")
os.Exit(1)
}
检查哪一个子命令被调用了。
switchos.Args[1]{
每个子命令,都会解析自己的flag并允许它访问后续的位置参数。
case"foo":
fooCmd.Parse(os.Args[2:])
fmt.Println("subcommand'foo'")
fmt.Println("enable:",*fooEnable)
fmt.Println("name:",*fooName)
fmt.Println("tail:",fooCmd.Args())
case"bar":
barCmd.Parse(os.Args[2:])
fmt.Println("subcommand'bar'")
fmt.Println("level:",*barLevel)
fmt.Println("tail:",barCmd.Args())
default:
fmt.Println("expected'foo'or'bar'subcommands")
os.Exit(1)
}
}
$gobuildcommand-line-subcommands.go
首先调用foo子命令。
$./command-line-subcommandsfoo-enable-name=joea1a2
subcommand'foo'
enable:true
name:joe
tail:[a1a2]
然后试一下bar子命令。
$./command-line-subcommandsbar-level8a1
subcommand'bar'
level:8
tail:[a1]
但是bar不接受foo的flag(enable)。
$./command-line-subcommandsbar-enablea1
flagprovidedbutnotdefined:-enable
Usageofbar:
-levelint
level
接下来我们会学习程序获取参数的另一种常见方式——环境变量。
下一个例子:环境变量
延伸文章資訊
- 1gotypes - example - Git at Google
Later examples will be variations on this one, and we'll often omit boilerplate details such as p...
- 2go command - cmd/go - pkg.dev
go get example.com/mod@none. See https://golang.org/ref/mod#go-get for details. The 'go install' ...
- 3How can I install a package with go get? - Stack Overflow
See also: go build, go install, go clean. For example, showing verbose output, $ go get -v github...
- 4About the go command - go.dev
For example, the source code of the Google logging package glog is obtained by running ... We can...
- 5命令行子命令 - Go by Example 中文版
go 和 git 这种命令行工具,都有很多的子命令。 并且每个工具都有一套自己的flag,比如: go build 和 go get 是 go 里面的两个不同的子命令。 flag 包让我们可以轻...