“区块链+时代无疑会是下一个风口,然而现在的区块链行业专业型人才正在遭遇瓶颈”兄弟连教育区块链学院院长尹成表示,“希望能通过兄弟连教育区块链培训学院为社会为企业培养并输送更多优质的区块链高精尖型技术人才。
部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用flag库和os库。
1.flag库的使用
Go语言标准库提供了用于快迅解析命令行参数的flag包,大致的使用步骤如下:
a.通过flag.String(),flag.Bool(),flag.Int()等方式来定义命令行中需要使用的参数。
b.在定义完flag后,通过调用flag.Parse()来进行对命令行参数的解析。
c.获取flag.String(),flag.Bool(),flag.Int()等方法的返回值,即对应用户输入的参数.
需要注意的是flag.Xxx()返回的值是变量的内存地址,要获取值时要通过在变量前加*(星号)获取.
说明:
像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,调用的时候需要传入3个参数
参数的说明如下:
一、arg表示参数名称,在控制台的时候,提供给用户使用.
二、arg表示默认值,如果用户在控制台没有给该参数赋值的话,就会使用该默认值.
三、arg表示使用说明和描述,在控制台中输入-arg的时候会显示该说明,类似-help
看个完整的使用例子:
packagemain
import(
"flag"
"fmt"
)
funcmain(){
married:=flag.Bool("married",false,"Areyoumarried?")
age:=flag.Int("age",22,"Howoldareyou?")
name:=flag.String("name","","Whatyourname?")
varaddressstring
//flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。
flag.StringVar(&address,"address","GuangZhou","Whereisyouraddress?")
flag.Parse()//解析输入的参数
fmt.Println("输出的参数married的值是:",*married)//不加*号的话,输出的是内存地址
fmt.Println("输出的参数age的值是:",*age)
fmt.Println("输出的参数name的值是:",*name)
fmt.Println("输出的参数address的值是:",address)
}
从运行结果中可以看出,address参数我们并没有指定值,则输出的就是默认值.
另外,-arg后面的=号也不是必须的,可以用空格代替.
如果要查看该程序的所有参数的使用,可以使用-help来查看,如下:
2.os库的使用
直接看例子
packagemain
import(
"os"
"fmt"
)
funcmain(){
args:=os.Args//获取用户输入的所有参数
ifargs==nil||len(args)<2{
Usage()//如果用户没有输入,或参数个数不够,则调用该函数提示用户
return
}
name:=args[1]//获取输入的第一个参数
age:=args[2]//获取输入的第二个参数
fmt.Println("yournameis:",name,"\nyourageis:",age)
}
varUsage=func(){
fmt.Println("youname?");
fmt.Println("youage?");
}
个人感觉还是flag获取参数好用一点,因为flag更贴切参数的用法,而且可以查看详情.
最后补充下如何获取变量的内存地址和接收方式
packagemain
import(
"fmt"
)
funcmain(){
varnamestring="abc"
varnameAddress*string=&name;//如果要接收变量的内存地址,变量对应的类型前要加*号
fmt.Println("name变量的内存地址:",&name)
fmt.Println("nameAddress的值:",nameAddress)
fmt.Println("&name==nameAddress?",&name==nameAddress)
fmt.Println("nameAddress对应变量的值:",*nameAddress)//内存地址前加*号则可以看到对应的值了.
fmt.Println("name变量的值:",*&*&name)//*号和&可以多次组合来使用,阅读的时候从右往左
}
高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!
原价1188元的12节区块链进阶课程,现仅需1元!
还可免费领取《Go语言基础实战项目开发》与《Go语言高级实战项目开发》教材两本!!
限时限量!!先到先得!!
http://www.ydma.cn/open/course/24
有疑问加站长微信联系(非本文作者)