命令源码文件怎样接收参数

flag.StringVar

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. var name string
  7. func init() {
  8. // 初始化参数
  9. flag.StringVar(&name, "name", "everyone", "user name")
  10. }
  11. func main() {
  12. // 1.正式接收参数
  13. flag.Parse()
  14. fmt.Printf("hello,%s! \n", name)
  15. }

函数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.PanicOnErrorflag.PanicOnErrorflag.ExitOnError都是预定义在flag包中的常量。flag.ExitOnError的含义是,告诉命令参数容器,当命令后跟—help或者参数设置的不正 确的时候,在打印命令参数使用说明后以状态码2结束当前程序。 状态码2代表用户错误地使用了命令,而flag.PanicOnError与之的区别是在最后抛出“运 行时恐慌(panic)`。