package main
import (
"flag"
"fmt"
"time"
)
// flag args
func f1() {
// 创建一个标志位参数
name := flag.String("name", "hhz", "请输入姓名")
age := flag.Int("age", 18, "请输入年龄")
married := flag.Bool("married", false, "婚否?")
cTime := flag.Duration("ct", time.Hour, "结婚多长时间")
//使用 flag 必须要先 解析
flag.Parse()
fmt.Println(*name)
fmt.Println(*age)
fmt.Println(*married)
fmt.Println(*cTime)
}
//go run main.go
//hhz
//18
//false
//1h0m0s
//go run main.go -name 靓仔 -age=25 -married=true -ct 1000h
//靓仔
//25
//true
//1000h0m0s
func f2() {
var (
name string
age int
married bool
cTime time.Duration
)
flag.StringVar(&name, "name", "hhz", "请输入姓名")
flag.IntVar(&age, "age", 18, "请输入年龄")
flag.BoolVar(&married, "married", false, "婚否?")
flag.DurationVar(&cTime, "ct", time.Hour, "结婚多长时间")
}
func f3() {
// 创建一个标志位参数
name := flag.String("name", "hhz", "请输入姓名")
age := flag.Int("age", 18, "请输入年龄")
married := flag.Bool("married", false, "婚否?")
cTime := flag.Duration("ct", time.Hour, "结婚多长时间")
//使用 flag 必须要先 解析
flag.Parse()
fmt.Println(*name)
fmt.Println(*age)
fmt.Println(*married)
fmt.Println(*cTime)
fmt.Println(flag.Args()) //返回命令行参数后的其他参数 , 以[]string类型
fmt.Println(flag.NArg()) //返回命名行参数后的其他参数的个数
fmt.Println(flag.NFlag()) //返回使用命令行参数的个数
}
//go run main.go -name 靓仔 -age=200 a b c d
//靓仔
//200
//false
//1h0m0s
//[a b c d]
//4
//2
// flag 获取命令行参数
func main() {
//f1()
//f2()
f3()
}
上课笔记
f1
实现效果与f2
相同,在于其flag.String
与flag.StringVar
的使用
- 当
go run main.go
就会输出我们自定义相应的Default
值,即
//hhz
//18
//false
//1h0m0s
- 当
go run main.go -name 靓仔 -age=25 -married=true -ct 1000h
就会覆盖其默认值,定义其相应的值
//go run main.go -name 靓仔 -age=25 -married=true -ct 1000h
//靓仔
//25
//true
//1000h0m0s
flag.Args()
:返回命令行参数后的其他参数 , 以[]string类型
flag.NArg()
:返回命名行参数后的其他参数的个数
flag.NFlag()
:返回使用命令行参数的个数
//go run main.go -name 靓仔 -age=200 a b c d
//靓仔
//200
//false
//1h0m0s
//[a b c d]
//4
//2
flag
os.Args
./xxx a b c
//返回os.Args:["./xxx"."a","b","c"]
flag标准库
变量声明
./xxx -name="靓仔" -age 20
两种方法
nameVal1 := flag.String("name","hhz","请输入名字") // 返回指针变量
var nameVar2 string
flag.stringVar( &nameVar2 , "name" , "hhz" , "请输入姓名")
//把一个已经存在的存在的变量绑定到命令行flag参数
必须调用
flag.Parse()
//解析命令传入的参数,赋值给对应的变量
flag其他函数
flag.Args() ////返回命令行参数后的其他参数,以[]string类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参数个数