DevopsCamp 第一期: 《cobra - 01 实现编译与参数绑定(简单)》

简介: 初始化 cobra 项目, 绑定参数, 实现交叉编译

DevopsCamp 第一期作业: 《cobra - 01 实现编译与参数绑定(简单)》 解题答案

原文链接: https://typonotes.com/posts/2023/01/23/devopscamp-cobra01/

本文为 DevOpsCamp 实战训练的作业解题答案 作业: cobra - 01 实现编译与参数绑定

DevOpsCamp作业地址: https://www.devopscamp.cc/semi-plan-202301-2/posts/homework/cobra01/

devopscamp-logo

作业要求:

  1. 使用 https://github.com/spf13/cobra 实现命令工具
  2. 命令具有以下参数

    1. --name 姓名
    2. --age 年龄
  3. 如果年龄为空, 默认为 20 岁。
  4. 完成交叉编译脚本, 编译其他平台的二进制文件
-rwxr-xr-x  1 franktang  staff  4220672 Jan 13 15:35 greeting-darwin-amd64
-rwxr-xr-x  1 franktang  staff  4203442 Jan 13 15:35 greeting-darwin-arm64
-rwxr-xr-x  1 franktang  staff  4215010 Jan 13 15:35 greeting-linux-amd64
-rwxr-xr-x  1 franktang  staff  4157892 Jan 13 15:35 greeting-linux-arm64
  1. 执行输出效果如下
$ ./out/greeting-darwin-arm64
 你好, 今年 20 岁

$ ./out/greeting-darwin-arm64 --age 30 --name zhangsan
zhangsan 你好, 今年 30 岁

解题过程

1. 安装依赖包

$ go get -u github.com/spf13/cobra

2. 创建命令

var root = &cobra.Command{
    Use:   "greeting",  // 命令名字
    Short: "打招呼", // 短介绍
    Run: func(cmd *cobra.Command, args []string) { // 运行函数
        greeting(name, age)
    },
}

3. 指定参数

  1. 定义了变量作为参数接受者。
  2. 使用 init 函数, 在程序初始化的时候, 传递参数值。

    1. 参数接受者 指针类型
    2. 参数名称, 字符串类型
    3. 短参数名称, 字符串类型, 但只接受一个参数
    4. 默认值, 具体类型
    5. 参数描述, 字符串类型
var (
    name = ""
    age  = 0
)

func init() {
    root.Flags().StringVarP(&name, "name", "", "", "姓名")
    root.Flags().IntVarP(&age, "age", "", 20, "年龄")
}

4. 调用执行

  1. greeting 是程序实际执行逻辑, 及执行逻辑入口。
  2. 在 root 的 Run 中调用 执行逻辑入口。
  3. 在 main 中调用 root 的执行函数 Execute()
func greeting(name string, age int) {
    fmt.Printf("%s 你好, 今年 %d 岁\n", name, age)
}


var root = &cobra.Command{
    Use:   "greeting",
    Short: "打招呼",
    Run: func(cmd *cobra.Command, args []string) {
        greeting(name, age) // 2. root 命令调用 greeting 业务
    },
}

func main() {
    err := root.Execute() // 3. main 调用 root 命令
    if err != nil {
        log.Fatal(err)
    }
}

4. 使用 Makefile 进行编译管理

  1. 使用 GOOSGOARCH 设置环境变量命令。
  2. 使用 build 命令, 使用进行 当前系统环境 的编译

    • 并且编译文件命名包含系统信息。
  3. 使用 buildx 命令, 实现 交叉编译
  4. 使用 clean 命令清空编译结果。
## 默认变量, 获取当前 go 的环境变量
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)

## build 在指定环境变异
build:
    go build -o out/greeting-$(GOOS)-$(GOARCH) .

## 通过指定环境变量, 执行交叉编译
buildx:
    GOOS=linux GOARCH=amd64 make build
    GOOS=linux GOARCH=arm64 make build
    GOOS=darwin GOARCH=amd64 make build
    GOOS=darwin GOARCH=arm64 make build

## 清理编译结果
clean:
    rm -rf out/

一个最基本命令结构就这样完成了, 是不是很简单?

B站作业视频

看这里: https://www.bilibili.com/video/BV1p24y1a7uc/

相关文章
|
安全 开发者 C++
Windows10安装modelscope后import这个模块报错:OSError: [WinError 1] 函数不正确。: 'D:\Anaconda\envs\MDS\lib\site-packages\modelscope\utils\ast_utils.py'
Windows10安装modelscope后import这个模块报错:OSError: [WinError 1] 函数不正确。: 'D:\Anaconda\envs\MDS\lib\site-packages\modelscope\utils\ast_utils.py'
676 1
|
数据可视化 前端开发 JavaScript
pyEcharts安装及详细使用指南(一)
pyEcharts安装及详细使用指南(一)
2002 0
pyEcharts安装及详细使用指南(一)
|
人工智能 IDE 测试技术
利用AI技术提升编程效率
【10月更文挑战第6天】本文将探讨如何通过人工智能(AI)技术提升编程效率。我们将介绍一些实用的工具和策略,如代码补全、错误检测和自动化测试,以及如何将这些工具整合到你的日常工作流程中。无论你是初学者还是经验丰富的开发者,都可以从这些技巧中受益。让我们一起探索如何利用AI技术来简化编程过程,提高生产力吧!
|
数据可视化 数据挖掘 BI
数据分析工具
【5月更文挑战第17天】数据分析工具
392 6
|
人工智能 Oracle 安全
中大型企业CRM系统十佳:2024年最佳选择
中大型企业因业务复杂、客户需求多样,对CRM系统有更高要求。本文推荐十大优秀CRM系统:销售易、Salesforce、Oracle、微软Dynamics 365、Zoho CRM、用友CRM、智邦国际、红圈销售、悟空CRM和神州云动,这些系统功能强大、定制性强,能有效提升企业管理效率。
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
569 1
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
391 3
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
12月前
|
供应链 区块链 数据安全/隐私保护
智能合约技术在供应链管理中的应用与挑战####
智能合约,作为区块链技术的重要组成部分,正逐步渗透至供应链管理领域,以其自动化执行协议、增强透明度与效率的特性,重塑着传统供应链的运作模式。本文旨在探讨智能合约如何在供应链中发挥作用,解决现有问题,并分析面临的挑战及可能的解决方案。通过具体案例分析,揭示其在提高供应链透明度、降低成本、加速交易速度等方面的潜力。 ####
|
安全 新能源 知识图谱
固态电池:电动汽车的能源革新
【10月更文挑战第15天】固态电池凭借其高能量密度、长续航、卓越安全性和快速充电等优势,正引领新能源汽车领域的技术革命。本文详细探讨了固态电池的技术特点、优势及其对电动汽车产业的影响,展示了其在提升续航里程、增强安全性和降低成本方面的巨大潜力。随着技术的不断进步和成本的降低,固态电池有望成为推动电动汽车行业发展的关键力量,开启一个更加绿色高效的交通新时代。