golang基础(2.命令源码文件)
命令源码文件怎样接收参数
flag.StringVar
package main
import (
"flag"
"fmt"
)
var name string
func init() {
// 初始化参数
flag.StringVar(&name, "name", "everyone", "user name")
}
func main() {
// 1.正式接收参数
flag.Parse()
fmt.Printf("hello,%s!
", name)
}
函数flag.StringVar接受 4 个参数。
- 第 1 个参数是用于存储该命令参数的值的地址,具体 到这里就是在前面声明的变量name的地址了,由表达式&name表示。
- 第 2 个参数是为了指定该命令参数的名称,这里是name。
- 第 3 个参数是为了指定在未追加该命 令参数时的默认值,这里是everyone。
- 至于第 4 个函数参数,即是该命令参数的简短说明了,这在打印命令说明时会用到。
flag.String
还有一个与flag.StringVar函数类似的函数,叫flag.String。这两个函数 的区别是,后者会直接返回一个已经分配好的用于存储命令参数值的地址。
package main
import (
"flag"
"fmt"
)
func main() {
// 1.正式接收参数
name := flag.String("name", "everyone", "username")
flag.Parse()
fmt.Println("hello: ", *name)
}
怎样在运行命令源码文件的时候传入参数,又怎样查看参数的使用说明
go run main.go --help
怎样自定义命令源码文件的参数使用说明
package main
import (
"flag"
"fmt"
"os"
)
func main() {
// 1.正式接收参数
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "命令提示
")
flag.PrintDefaults()
}
name := flag.String("name", "everyone", "username")
flag.Parse()
fmt.Println("hello: ", *name)
}
flag.CommandLine
我们在调用flag包中的一些函数(比如StringVar、Parse等等)的时候,实际上是在调flag.CommandLine变量的对应方法。 flag.CommandLine相当于默认情况下的命令参数容器。所以,通过对flag.CommandLine 重新赋值,我们可以更深层次地定制当前命令源码文件的参数使用说明。
package main
import (
"flag"
"fmt"
"os"
)
func init() {
flag.CommandLine = flag.NewFlagSet("", flag.ExitOnError)
flag.CommandLine.Usage = func() {
fmt.Fprintf(os.Stderr, "命令提示,异常退出
")
flag.PrintDefaults()
}
}
func main() {
// 1.正式接收参数
name := flag.String("name", "everyone", "username")
flag.Parse()
fmt.Println("hello: ", *name)
}
由于我们在这里 传给flag.NewFlagSet函数的第二个参数值是flag.PanicOnError。 flag.PanicOnError和flag.ExitOnError都是预定义在flag包中的常量。 flag.ExitOnError的含义是,告诉命令参数容器,当命令后跟--help或者参数设置的不正 确的时候,在打印命令参数使用说明后以状态码2结束当前程序。 状态码2代表用户错误地使用了命令,而flag.PanicOnError与之的区别是在最后抛出“运 行时恐慌(panic)。