2、命令源码文件

2019-03-31  本文已影响0人  凌云丶

1、什么是命令源码文件

如果一个源码文件声明属于main包,并且包含一个无参数声明且无返回值声明的main函数,那么他就是命令源码文件

2、命令源码文件的用途

命令源码文件是程序的运行入口,是每个独立运行程序必须拥有的,我们可通过构建或者安装,生成其对应的可执行文件

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

import (
    "flag"
    "fmt"
)

var name string

func init() {
    flag.StringVar(&name, "name", "everyone", "The greeting object.")
}

func main() {
    flag.Parse()
    fmt.Printf("Hello, %s!\n", name)
}
flag.StringVar(&name, "name", "everyone", "The greeting object.")

函数flag.StringVar 接受4个参数
第一个参数用于存储该命令参数值得地址,就是前面声明变量name的地址了,由表达式&name表示
第二个参数指定了该命令参数的名称,也就是name
第三个参数是为了指定在未追加该命令参数时的默认值,也就是everyone
第四个参数时命令参数的简短说明,在打印命令说明的时候会用到

还有一个与flag.StringVar函数类似的函数,叫flag.String 这两个函数的区别是后者会直接返回一个已经分配好用于存储命令参数值得地址

import (
    "flag"
    "fmt"
)

var name =new(string)

func init() {
    name = flag.String("name", "everyone", "The greeting object.")
}

func main() {
    flag.Parse()
    fmt.Printf("Hello, %s!\n", *name)
}

flag.Parse函数用于真正解析命令参数,并把他们赋值为给相应的变量
对该函数的调用必须在所有命令参数存储载体声明之后,并且在读取任何命令参数值之前进行

4、在运行命令源码文件的时候传入参数

执行下面命令

go run 文件名.go -name="World”

就会打印

Hello, World!

执行

go run demo2.go --help

打印

Usage of C:\Users\zh137\AppData\Local\Temp\go-build677484706\b001\exe\demo2.exe:
  -name string
        The greeting object. (default "everyone")
exit status 2

4、自定义命令源码文件的参数使用说明

import (
    "flag"
    "fmt"
    "os"
)

var name = new(string)

var cmdLine = flag.NewFlagSet("question", flag.ExitOnError)

func init() {
    cmdLine.StringVar(name, "name", "everyone", "The greeting object.")
}

func main() {
    cmdLine.Parse(os.Args[1:])
    fmt.Printf("Hello, %s!\n", *name)
}

5、命令源码文件接受哪些类型的参数值

func (f *FlagSet) StringVar(p *string, name string, value string, usage string) {
    f.Var(newStringValue(value, p), name, usage)
}

func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {
    f.Var(newBoolValue(value, p), name, usage)
}

func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
    f.Var(newDurationValue(value, p), name, usage)
}

func (f *FlagSet) IntVar(p *int, name string, value int, usage string) {
    f.Var(newIntValue(value, p), name, usage)
}

func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {
    f.Var(newUintValue(value, p), name, usage)
}

func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {
    f.Var(newFloat64Value(value, p), name, usage)
}

func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {
    f.Var(newInt64Value(value, p), name, usage)
}

func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {
    f.Var(newUint64Value(value, p), name, usage)
}
上一篇下一篇

猜你喜欢

热点阅读