命令源码文件怎样接收参数
flag.StringVar
package mainimport ("flag""fmt")var name stringfunc init() {// 初始化参数flag.StringVar(&name, "name", "everyone", "user name")}func main() {// 1.正式接收参数flag.Parse()fmt.Printf("hello,%s! \n", 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) }
<a name="yh5DX"></a>
## 怎样在运行命令源码文件的时候传入参数,又怎样查看参数的使用说明
go run main.go —help
<a name="IHvPC"></a>
## 怎样自定义命令源码文件的参数使用说明
package main
import ( “flag” “fmt” “os” )
func main() { // 1.正式接收参数 flag.Usage = func() { fmt.Fprintf(os.Stderr, “命令提示\n”) flag.PrintDefaults() } name := flag.String(“name”, “everyone”, “username”) flag.Parse() fmt.Println(“hello: “, *name) }
<a name="XLEnm"></a>
## 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, “命令提示,异常退出\n”) 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)`。
