Golang 获取命令行参数

本文介绍了Go语言中处理命令行参数的方法,包括os.Args获取所有参数,以及flag包提供的IntVar、BoolVar、StringVar系列函数用于设置默认值和解析命令行参数。通过示例展示了如何在程序中使用这些参数,并解释了如何通过-h展示帮助信息。此外,还对比了flag.Int系列函数与flag.IntVar系列的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

os.Args

os.Args 返回字符切片,第一个元素是代码编译后后的位置,其余命令行参数排排坐

package main

import (
	"fmt"
	"os"
)

func main() {
	//os.Args 返回字符切片,第一个元素是代码编译后后的位置,其余命令行参数排排坐
	fmt.Println(os.Args)
}
xieruixiangdeMacBook-Pro:JSF xieruixiang$ go run main.go -p=a b c d e f g
[/var/folders/vg/t7pd86zd7wj3p0162861ggyh0000gn/T/go-build3676278252/b001/exe/main -p=a b c d e f g]
flag.IntVar系列

1.flag.IntVar(p1,p2,p3,p4) 接受命令行参数(int) p1:接受参数值的指针*int p2:命令行参数名 p3:默认值(int) p4:说明

2.flag.BoolVar(p1,p2,p3,p4) 接受命令行参数(bool) p1:接受参数值的指针*bool p2:命令行参数名 p3:默认值(bool) p4:说明

3.flag.StringVar(p1,p2,p3,p4) 接受命令行参数(string) p1:接受参数值的指针*string p2:命令行参数名 p3:默认值(string) p4:说明

package main

import (
	"flag"
	"fmt"
)

func main() {
	var age int
	var name string
	var have bool

	// flag.IntVar(p1,p2,p3,p4) 接受命令行参数(int) p1:接受参数值的指针*int p2:命令行参数名 p3:默认值(int) p4:说明
	flag.IntVar(&age, "A", 20, "年龄:age")
	// flag.BoolVar(p1,p2,p3,p4) 接受命令行参数(bool) p1:接受参数值的指针*bool p2:命令行参数名 p3:默认值(bool) p4:说明
	flag.BoolVar(&have, "HH", false, "需要粉丝不:have")
	// flag.StringVar(p1,p2,p3,p4) 接受命令行参数(string) p1:接受参数值的指针*string p2:命令行参数名 p3:默认值(string) p4:说明
	flag.StringVar(&name, "N", "佚名", "名称:name")

	//还有其它的自己去看,比如:flag.Int64Var,flag.Float64Var......

	flag.Parse()
	fmt.Println(have)
	haveDescription := "不需要"
	if have {
		haveDescription = "需要"
	}
	// go run main.go -N=xie -A=28 -HH=true
	// go run main.go -N xie -A 28 -H true
    // go run main.go -N xie -A 28 -H false
	fmt.Printf("我叫%s,今年%d岁,我%s粉丝", name, age, haveDescription)
}

4.flag.Parse() 参数值才会写入到指针中

5.命令行参数通过-“key”=“value"携带,“=”可以省略

xieruixiangdeMacBook-Pro:JSF xieruixiang$ go run main.go -name=xie -age=28 -have=true
我叫xie,今年28岁,我需要粉丝

#如果是bool类型且省略“=”,那么只要带上 -key 则为true
xieruixiang$ go run main.go -name xie -age 28 -have false
我叫xie,今年28岁,我需要粉丝
xieruixiangdeMacBook-Pro:JSF 

xieruixiangdeMacBook-Pro:JSF xieruixiang$ go run main.go -name xie -age 28 -have=false
我叫xie,今年28岁,我不需要粉丝

6.说明可以通过 -h 来展示

xieruixiangdeMacBook-Pro:JSF xieruixiang$ go run main.go -h
Usage of /var/folders/vg/t7pd86zd7wj3p0162861ggyh0000gn/T/go-build1151936869/b001/exe/main:
  -age int
        年龄:age (default 20)
  -have
        需要粉丝不:have
  -name string
        名称:name (default "佚名")
flag.Int系列

flag.Int系列(a)和flag.IntVar系列(b)差不多, a省略了第一个接受参数的指针(与b差异),返回指针,后续通过指针获取具体的参数值

package main

import (
	"flag"
	"fmt"
)

func main() {

	//flag.Int系列(a)和flag.IntVar系列(b)差不多, a 省略了第一个接受参数的指针(与b差异),返回指针,后续通过指针获取具体的参数值
	age := flag.Int("age", 20, "年龄:age")
	have := flag.Bool("have", false, "需要粉丝不:have")
	name := flag.String("name", "佚名", "名称:name")


	flag.Parse()

	haveDescription := "不需要"
	//指针获取参数值
	if *have {
		haveDescription = "需要"
	}
	// go run main.go -name=xie -age=28 -have=true
	// go run main.go -name xie -age 28 -have true

	//指针获取参数的值
	fmt.Printf("我叫%s,今年%d岁,我%s粉丝\r\n", *name, *age, haveDescription)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值