Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

44|一个程序多种功能:构建子命令与flags

你好,我是郑建勋。
之前,我们介绍了 Worker 的开发以及代码的测试,但之前的程序其实还是单机执行的。接下来让我们打开分布式开发的大门,一起看看如何开发 Master 服务,实现任务的调度与故障容错。
考虑到 Worker 和 Master 有许多可以共用的代码,并且关系紧密,所以我们可以将 Worker 与 Master 放到同一个代码仓库里。

Cobra 实现命令行工具

代码放置在同一个仓库后,我们遇到了一个新的问题。代码中只有一个 main 函数,该如何构建两个程序呢?其实,我们可以参考 Linux 中的一些命令行工具,或者 Go 这个二进制文件的处理方式。例如,执行 go fmt 代表执行代码格式化程序,执行 go doc 代表执行文档注释程序。
在本项目中,我们使用 github.com/spf13/cobra 库提供的能力构建命令行应用程序。命令行应用程序通常接受各种输入作为参数,这些参数也被称为子命令,例如 go fmt 中的 fmt 和 go doc 中的 doc。同时,命令行应用程序也提供了一些选项或运行参数来控制程序的不同行为,这些选项通常被称为 flags。

Cobra 实例代码

怎么用 Cobra 来实现命令行工具呢?我们先来看一个简单的例子。在下面这个例子中,cmdPrint、cmdEcho、cmdTimes 表示我们将向程序加入的 3 个子命令。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用Cobra库构建命令行工具,并展示了如何实现子命令和flags。通过实际代码示例和运行结果,生动地展示了Cobra库的使用方法和在实际项目中的应用。文章首先介绍了Cobra库的基本概念和用法,通过一个简单的例子展示了如何定义子命令和flags,并演示了如何执行这些子命令和使用flags。接着,展示了如何在项目中使用Cobra,遵循Cobra给出的组织代码的推荐目录结构,并通过Worker和Master子命令的实现展示了如何将Cobra应用到实际项目中。此外,还介绍了如何使用flags来控制程序行为,解决了端口冲突的问题。总结了Cobra库的灵活性和实用性,对于想要学习命令行工具开发的读者具有很好的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • shuff1e
    这是想到哪讲到哪么?课程大纲上44节不是讲微服务框架与协议的么?怎么又忽然来讲cobra?pflag?这种基础的工具放在前面讲会不会更好一些?

    作者回复: 之前主要是在开发Worker的功能,这一章开始讲解Master服务了。 因为有了两个服务放在同一代码中的需求,所以介绍了命令行的工具。

    2023-01-19归属地:北京
    5
  • 陈卧虫
    正好在写一个命令行工具,今天就用上了,但是遇到了一个问题,我需要实现交互式的,能多次用户输入,但是cobra好像只能在启动时指定参数,无法在运行中输入向Yes 或No这样的参数,有其它的方案吗(除了直接读取标准输入,我现在就这么做的)
    2023-01-19归属地:浙江
    1
  • 一打七
    为什么有时候是一个杠有时候是两个,有什么区别吗?-t=3 --http=:8081
    2024-01-14归属地:北京
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部