DevopsCampPhase1作业:《cobra - 01 实现编译与参数绑定(简单)》答案原文链接:https://tangx.in/posts/2023/0...本文为DevOpsCamp实训答案的作业解答作业:cobra-01实现编译和参数绑定。DevOpsCamp工作地址:https://www.devopscamp.cc/sem...工作要求:使用https://github.com/spf13/cobra实现命令工具命令有以下参数--namename--ageage如果age为空,默认为20。完成交叉编译脚本并为其他平台编译二进制文件-rwxr-xr-x1franktangstaff4220672Jan1315:35greeting-darwin-amd64-rwxr-xr-x1franktangstaff4203442Jan1315:35greeting-darwin-arm64-rwxr-xr-x1franktangstaff4215010Jan1315:35greeting-linux-amd64-rwxr-xr-x1franktangstaff4157892Jan1315:35greeting-linux-arm64的输出如下$./out/greeting-darwin-arm64你好,今年20岁$./out/greeting-darwin-arm64--age30--namezhangsanzhangsan你好,今年30岁问题解决过程1.安装依赖包$去获取-ugithub。com/spf13/cobra2.创建命令varroot=&cobra.Command{Use:"greeting",//命令名Short:"greeting",//简短介绍Run:func(cmd*cobra.Command,args[]string){//运行函数greeting(name,age)},}3.指定参数将变量定义为参数接收者。在程序初始化时使用init函数传递参数值。参数接受器指针类型参数名,字符串类型短参数名,字符串类型,但只有一个参数默认值,具体类型参数说明,字符串类型var(name=""age=0)funcinit(){root.Flags().StringVarP(&name,"name","","","name")root.Flags().IntVarP(&age,"age","",20,"age")}4.调用和执行greeting才是程序真正的执行逻辑,是执行逻辑的入口。调用root的Run中的执行逻辑入口。在main中调用root的执行函数Exec??ute()。funcgreeting(namestring,ageint){fmt.Printf("%shello,age%dthisyear\n",name,age)}varroot=&cobra.Command{Use:"greeting",简写:"greeting",Run:func(cmd*cobra.Command,args[]string){greeting(name,age)//2.root命令调用问候语服务},}funcmain(){err:=root.Execute()//3.Main调用root命令iferr!=nil{log.Fatal(err)}}4.使用Makefile进行编译管理使用GOOS和GOARCH设置环境变量命令。使用build命令编译当前系统环境,编译后的文件名包含系统信息。使用buildx命令实现交叉编译,使用clean命令清除编译结果。##默认变量,获取当前go环境变量GOOS?=$(shellgoenvGOOS)GOARCH?=$(shellgoenvGOARCH)##buildMutationbuildinspecifiedenvironment:gobuild-oout/greeting-$(GOOS)-$(GOARCH).##通过指定环境变量执行交叉编译buildx:GOOS=linuxGOARCH=amd64makebuildGOOS=linuxGOARCH=arm64makebuildGOOS=darwinGOARCH=amd64makebuildGOOS=darwinGOARCH=arm64makebuild##清理编译结果clean:rm-rfout/一个基本的命令结构就这样完成了,是不是很简单?B站作业视频https://www.bilibili.com/video...
