网易首页 > 网易号 > 正文 申请入驻

Golang如何快速构建一个CLI小工示例

0
分享至

这篇文章主要为大家介绍了Golang如何快速构建一个CLI小工具详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

如何Golang快速构建一个CLI小工具

在现实开发的过程中,大家会发现很多开源的框架都会有着自己的一个CLI工具库来帮助开发者们通过命令行的方式快速的达到某些目的,比如常见的docker命令。

那么在这篇文章当中,主要给大家介绍一个golang的小框架,我们可以借助这个框架来快速搭建一个小的CLI工具

先上效果

我们这边构建了一个叫gtools的小工具,用来容纳我们自已用golang开发的一些小的工具

>> gtools
gtools is a CLI application for golang command tools.
Usage:
gtools [command]
Available Commands:
autoSelector randomly select string from a list
completion Generate the autocompletion script for the specified shell
help Help about any command
Flags:
-h, --help help for gtools
-t, --toggle Help message for toggle
Use "gtools [command] --help" for more information about a command.

这边的autoSeletor是我们自己的一个小工具,用来随机的从输入的字符列表中选一个作为结果:

>> gtools as 学习 看电影 还是学习
学习
>> gtools as 学习 看电影 还是学习
还是学习

那么如何实现呢?

在这边,我们用了一个叫cobra的框架,这个框架被广泛运用到很多开源的产品当中,比如docker-compose, kubectl等。

首先,我们要安装相应的环境:

go get -u github.com/spf13/cobra@latest
go install github.com/spf13/cobra-cli@latest

在执行完上面两条命令后我们就具备最基本的开发条件了,接下来开始我们的开发吧!

使用Cobra初始化我们的项目

cobra-cli init

执行完之后,我们会在本地目录看到这样的结构

├── main.go
├── cmd
│ └── root.go

main.go就是我们的主入口了,root是我们命令的根命令

main.go

// 只是做了一个执行的操作
func main() {
cmd.Execute()
}

Root.go 定义了根命令,还有一些初始化的操作

var rootCmd = &cobra.Command{
Use: "gtools", // 这是你的命令的名字
Short: "A brief description of your application",
Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
func init() {
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
// rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.main.yaml)")
// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

加入我们的子命令

现在,我们需要加入一个子命令,如autoSelector, 只需执行一下命令即可:

cobra-cli add autoSelector

对应的一个叫autoSelector.go的文件就会出现在cmd目录底下,并且已经为你准备了基本的命令行框架

// autoSelectorCmd represents the autoSelector command
var autoSelectorCmd = &cobra.Command{
Use: "autoSelector", // 名字
Aliases: []string{"as"}, // 命令行的简写
Short: "randomly select string from a list", //简单的描述
Long: `randomly select string from a list`, //详细描述
Run: func(cmd *cobra.Command, args []string) {
// 在这里加入/调用你的主要逻辑
}
}
func init() {
// 注册到根命令下
rootCmd.AddCommand(autoSelectorCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// autoSelectorCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// autoSelectorCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

实现我们的功能

我们可以创建一个pkg包来存放我们的具体实现逻辑,在cmd中只需要做简单的调用即可

import (
"math/rand"
"time"
)
// 简单实现逻辑
func AutoSelect(inputs []string) (selected string, err error) {
source := rand.NewSource(time.Now().UnixNano())
r := rand.New(source)
randomIndex := r.Intn(len(inputs))
selected = inputs[randomIndex]
return selected, nil
}

此时我们的代码工具就基本实现完成了,只需要编译一下就可以直接使用。编译运行

go build -o gtools

你就可以得到一个叫gtools的二进制包,直接运行就可以看到我们开头的效果啦~

代码仓库: github.com/819110812/G…

  • 原文来自:https://www.jb51.net/article/266390.htm
  • 本文地址:https://www.linuxprobe.com/gtools-golang-linuix.html编辑:吴向平,审核员:逄增宝
  • Linux命令大全:https://www.linuxcool.com/
  • Linux系统大全:https://www.linuxdown.com/
  • 红帽认证RHCE考试心得:https://www.rhce.net/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
清凉峰一男一女爬山后续:女子被擦伤,伤势曝光,衣服却干干净净

清凉峰一男一女爬山后续:女子被擦伤,伤势曝光,衣服却干干净净

180°视角
2024-04-26 13:54:10
中俄关系,美国说了不算,布林肯威胁话音刚落,普京将带礼物访华

中俄关系,美国说了不算,布林肯威胁话音刚落,普京将带礼物访华

爱钓鱼的阿
2024-04-27 19:29:34
24岁被包养,36岁找了22岁男友,恋爱2个月蛊惑他将46岁情夫杀害

24岁被包养,36岁找了22岁男友,恋爱2个月蛊惑他将46岁情夫杀害

胖胖侃咖
2024-04-27 08:00:09
尘埃落定!马宁本轮吹罚国安点球犯规是不是误判,终于有权威结论

尘埃落定!马宁本轮吹罚国安点球犯规是不是误判,终于有权威结论

罗掌柜体育
2024-04-27 18:48:24
哈登前3战场均打全队最高41.7分钟得23.7分7助 三分命中率44.8%

哈登前3战场均打全队最高41.7分钟得23.7分7助 三分命中率44.8%

直播吧
2024-04-27 11:54:23
王曼昱澳门归来,和家人一起吃饭揭示的五个感人真相

王曼昱澳门归来,和家人一起吃饭揭示的五个感人真相

黄轩亮片
2024-04-26 16:03:56
48年围歼敌35军时,毛主席大怒,得知指挥者是谁后,主席亲自下场

48年围歼敌35军时,毛主席大怒,得知指挥者是谁后,主席亲自下场

文辰国学
2024-04-26 16:21:03
中美对抗现在到了何种程度?

中美对抗现在到了何种程度?

头条爆料007
2024-04-26 18:14:02
激将法大结局,老邵不得不服,加代和藉放下了仇恨

激将法大结局,老邵不得不服,加代和藉放下了仇恨

金昔说故事
2024-04-27 20:13:55
好消息传来:“农村5禁” 放宽!农民朋友说早该这样!

好消息传来:“农村5禁” 放宽!农民朋友说早该这样!

天下纵览
2024-04-27 09:07:20
广东外援沃特斯骑电动车未戴头盔被交警拦下,朱芳雨:该罚款

广东外援沃特斯骑电动车未戴头盔被交警拦下,朱芳雨:该罚款

懂球帝
2024-04-27 10:28:13
美国做梦都没想到,搞死美国竟是这仨:军工复合体、华尔街和以色列

美国做梦都没想到,搞死美国竟是这仨:军工复合体、华尔街和以色列

星辰大海路上的种花家
2024-04-26 19:28:31
音乐节邀涉台独田馥甄,天津文旅硬刚,官微评论支持者不少

音乐节邀涉台独田馥甄,天津文旅硬刚,官微评论支持者不少

娱乐八卦木木子
2024-04-27 17:12:58
美国智库分析中国策略后,得出结论:中国在下一盘无与伦比的大棋

美国智库分析中国策略后,得出结论:中国在下一盘无与伦比的大棋

祥瑞
2024-04-27 10:53:07
神奇的大自然——这是一颗被雷电击中的树

神奇的大自然——这是一颗被雷电击中的树

农人老寓
2024-04-27 16:58:17
英王室又出大事!白金汉宫军马街头狂奔,背后透露凯特消失隐情

英王室又出大事!白金汉宫军马街头狂奔,背后透露凯特消失隐情

小寒嫣语
2024-04-26 11:26:26
“骗”了我们30年,韩红父亲原来是家喻户晓的他难怪都不敢得罪她

“骗”了我们30年,韩红父亲原来是家喻户晓的他难怪都不敢得罪她

清欢渡语
2024-04-24 22:48:41
游泳奥运名单:张雨霏、覃海洋兼3项,潘展乐、李冰洁兼4项

游泳奥运名单:张雨霏、覃海洋兼3项,潘展乐、李冰洁兼4项

乒烧足篮排
2024-04-27 19:17:35
认清现实:赖在仁爱礁9000多天的菲律宾登陆舰,已经不可能拖走了

认清现实:赖在仁爱礁9000多天的菲律宾登陆舰,已经不可能拖走了

吃鱼思故渊
2024-04-26 22:14:38
消息称华为正在开发国产HBM存储器

消息称华为正在开发国产HBM存储器

cnBeta.COM
2024-04-27 02:35:05
2024-04-27 21:14:44
孙有匪
孙有匪
科技
1595文章数 2009关注度
往期回顾 全部

科技要闻

特斯拉这款车型刚上市几天,就上调价格

头条要闻

警车鸣笛进村指名道姓喊话一村民"涉嫌嫖娼" 当地回应

头条要闻

警车鸣笛进村指名道姓喊话一村民"涉嫌嫖娼" 当地回应

体育要闻

时代要落幕了?詹姆斯杜兰特陷0-3绝境

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

北京房价回到2016年

汽车要闻

5月上市/智能化丰富 海狮 07EV正式到店

态度原创

房产
旅游
健康
教育
数码

房产要闻

海南最新房价出炉,三亚跌价最猛!

旅游要闻

散装河北,冀北、冀东、冀中、冀南如何划分?

这2种水果可降低高血压死亡风险

教育要闻

70岁奶奶教娃念英文,开口发音标准似听力考试,一听身份没想到

数码要闻

苹果已停止升级 Mac 起步内存,库克更看重优化软硬件集成度

无障碍浏览 进入关怀版