我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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…

以上就是Golang如何快速构建一个CLI小工具详解的详细内容,更多关于Golang构建CLI小工具的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在SpringBoot中利用Spring Initializr 快速构建一个工程

本篇文章给大家分享的是有关如何在SpringBoot中利用Spring Initializr 快速构建一个工程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、Spring I
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录