「建议收藏」 十篇文章带你 Golang Cobra 入门到实战(含源码讲解)
「建议收藏」 十篇文章带你 Golang Cobra 入门到实战(含源码讲解)
大家好, 我是老麦。 一头专注 Golang 和 K8s 的胖熊猫。
如果在 公众号 文章发现状态为 已更新, 建议点击 查看原文 查看最新内容。
状态: 未更新
Cobra 知识点讲解
时间不知不觉到了 3 月, 我们的 DevOpsCamp 也到了 第4期。 在前面的内容中, 我尝试通过将 cobra 拆解成一个个功能, 并进行解释和扩展。 希望能带领大家逐步进入 Go 开发的世界。
其实这些都不难, 但是由于刚接触到一个未知的东西的时候, 总是有一种茫然无措, 不知道如何下手的烦躁和不安。 这个也是我当初入门的时遇到的困境。
希望大家在完成了这部分练习之后, 能自信的回过头来说一句 原来不过如此嘛。
1. 第一个命令: 创建并使用 Makefile 管理交叉编译
第一步总是最简单的, 但也是最重要的。
本文中, 我们将一起使用 cobra 创建一个最简单的命令。 并且使用 Makefile 实现交叉编译的管理。 让一切都简单起来。
2. 配置文件管理: 读取和写入 JSON 和 YAML
交互, 总是从数据开始, 到数据结束。
JSON
和 YAML
作为配置管理最常用的两种格式, 另外就是 ini, toml, xml
。 尤其是 JSON
, 在 HTTP
请求中基本山更可以是做 默认的 的数据传递格式了。
本文中, 我们将学习如何, (1) 如何读取和写入文件。 (2)如何从一种结构转换为另一种结构, 以及一些常用方法和函数命名的变种。
3. 交互式命令: 使用 survey 让你的命令更友好
一个好的工具, 一定是简单好用的。
在本文中, 我们将使用 survey
实现命令提示、选择等功能。 一方面可以减少用户使用的学习成本, 另一方面减少用户输入可以增加我们工具的健壮性。
4. Golang 项目结构: 让你的项目更具维护性
项目越大,功能越多,越需要模块化管理。
在本文中, 我们将一起阅读一些文档, 包括官方和社区的。 了解 Golang 目录的 命名规则 以及 组合方式。 同时展开介绍特殊的 internal
目录。
5. Cobra 子命令: 「cobra 命令树」 与 「gin 的路由树」 的实现差异(源码)
要致富先修路, 多生孩子多种树。
在本文中, 我们将通过 Cobra 子命令为切入点, 一起学习源码, 讲解 Cobra 是如何组合 链表 实现命令树的。 将简单介绍一下 gin 路由树的实现逻辑 与 Cobra 的不同点。
另外, 我们对 gin 进行了二次封装, 模拟 Cobra 的方式实现路由树。
- 代码封装练习: 模仿 cobra 链表方式实现 gin 路由树: https://github.com/tangx-labs/gin-cobra-demo
6. Cobra 持久参数: 聊聊 Golang 引用类型 的使用陷阱(源码)
画虎画皮难画骨, 知人知面不知心
本文中, 我们将继续一切学习 Cobra 的源码, 一起找出 Cobra 子命令 真正的父命令, 通过这个案例讲解 Golang 引用类型 的使用陷阱。
7. Cobra 命令自动补全方案: 让你操作飞起来(官方文档)
磨刀不误砍柴工, 读完硕士再打工
本文是 Cobra 官方页面, 配置你的 Shell 终端, 完成命令自动补全。 让操作飞起来。
- Cobra 命令自动补全方案: 让你操作飞起来(官方文档): https://github.com/spf13/cobra/blob/main/shell_completions.md
- Zsh 用户可以直接按照此文档配置: https://github.com/zsh-users/zsh-completions
8. cobrautils 扩展库: 使用 struct 聚合 Flag 参数列表(支持指针类型)
君子性非异也, 善假于物也。
cobrautils
是我写的一个 cobra 扩展库, 目的是为了通过 Struct
方便 的管理所有 flag 和默认值。
9. Golang interface: 一个案例给你讲清楚「接口实现」和「注意事项」
门前大桥下, 游过一群鸭
众所周知, Golang 的接口是鸭子类型。
本文中, 将介绍什么是 鸭子类型? Struct 如何实现接口? 以及接口在使用过程中的一些常用方法。
10. Golang Context: 用 “故事” 和 “源码” 帮搞懂核心知识「值传递」(源码)
如果愿意一层一层的剥开我的心, 你会发现我心底最深的秘密
上下文 Context 应该是 Go语言 中一个极其重要的 基石 概念了。
本文中, 我们将一起学习 Golang Context 的源码, 一起掌握核心知识 值传递。 同时将通过一个案例 着重 说明 值传递 的过程、用法和注意事项。
实战练习
本次实战练习我们只做一个事情, 用 cobra 写一个 命令行 的 dns 客户端。把我们之前已经掌握了一些基本招式, 运用起来, 形成自己的拳法。
整个脑图,我整理如下。 没有思路的朋友可以根据这个脑图进行。
在脑图中, 05 扩展 中有一个 接口定义。 最终我们要实现多运营商截图。 因此在前期设计和实现的时候, 可以多考虑一下 扩展性 的问题。
补充: 本次 dns 解析上, 我用的是 dnspod, 也就是腾讯云。 选择其他大厂也一样, 都有完整的 SDK。
这里有一个很久之前练习写的 tangx/dnsx - Github : https://github.com/tangx/dnsx , 权当参考。
配置
添加
删除
- 原文链接:https://typonotes.com/posts/2023/03/02/cobra-book/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。