版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Golang如何快速构建一个CLI小工具详解目录如何Golang快速构建一个CLI小工具先上效果那么如何实现呢?
如何Golang快速构建一个CLI小工具
在现实开发的过程中,大家会发现很多开源的框架都会有着自己的一个CLI工具库来帮助开发者们通过命令行的方式快速的达到某些目的,比如常见的docker命令。
那么在这篇文章当中,主要给大家介绍一个golang的小框架,我们可以借助这个框架来快速搭建一个小的CLI工具
先上效果
我们这边构建了一个叫gtools的小工具,用来容纳我们自已用golang开发的一些小的工具
gtools
gtoolsisaCLIapplicationforgolangcommandtools.
Usage:
gtools[command]
AvailableCommands:
autoSelectorrandomlyselectstringfromalist
completionGeneratetheautocompletionscriptforthespecifiedshell
helpHelpaboutanycommand
Flags:
-h,--helphelpforgtools
-t,--toggleHelpmessagefortoggle
Use"gtools[command]--help"formoreinformationaboutacommand.
这边的autoSeletor是我们自己的一个小工具,用来随机的从输入的字符列表中选一个作为结果:
gtoolsas学习看电影还是学习
学习
gtoolsas学习看电影还是学习
还是学习
那么如何实现呢?
在这边,我们用了一个叫cobra的框架,这个框架被广泛运用到很多开源的产品当中,比如docker-compose,kubectl等。
首先,我们要安装相应的环境:
goget-u/spf13/cobra@latest
goinstall/spf13/cobra-cli@latest
在执行完上面两条命令后我们就具备最基本的开发条件了,接下来开始我们的开发吧!
使用Cobra初始化我们的项目
cobra-cliinit
执行完之后,我们会在本地目录看到这样的结构
├──main.go
├──cmd
│└──root.go
main.go就是我们的主入口了,root是我们命令的根命令
main.go
//只是做了一个执行的操作
funcmain(){
cmd.Execute()
Root.go定义了根命令,还有一些初始化的操作
varrootCmd=cobra.Command{
Use:"gtools",//这是你的命令的名字
Short:"Abriefdescriptionofyourapplication",
Long:`Alongerdescriptionthatspansmultiplelinesandlikelycontains
examplesandusageofusingyourapplication.Forexample:
CobraisaCLIlibraryforGothatempowersapplications.
Thisapplicationisatooltogeneratetheneededfiles
toquicklycreateaCobraapplication.`,
//Uncommentthefollowinglineifyourbareapplication
//hasanactionassociatedwithit:
//Run:func(cmd*cobra.Command,args[]string){},
//Executeaddsallchildcommandstotherootcommandandsetsflagsappropriately.
//Thisiscalledbymain.main().ItonlyneedstohappenoncetotherootCmd.
funcExecute(){
err:=rootCmd.Execute()
iferr!=nil{
os.Exit(1)
funcinit(){
//Hereyouwilldefineyourflagsandconfigurationsettings.
//Cobrasupportspersistentflags,which,ifdefinedhere,
//willbeglobalforyourapplication.
//rootCmd.PersistentFlags().StringVar(cfgFile,"config","","configfile(defaultis$HOME/.main.yaml)")
//Cobraalsosupportslocalflags,whichwillonlyrun
//whenthisactioniscalleddirectly.
rootCmd.Flags().BoolP("toggle","t",false,"Helpmessagefortoggle")
加入我们的子命令
现在,我们需要加入一个子命令,如autoSelector,只需执行一下命令即可:
cobra-cliaddautoSelector
对应的一个叫autoSelector.go的文件就会出现在cmd目录底下,并且已经为你准备了基本的命令行框架
//autoSelectorCmdrepresentstheautoSelectorcommand
varautoSelectorCmd=cobra.Command{
Use:"autoSelector",//名字
Aliases:[]string{"as"},//命令行的简写
Short:"randomlyselectstringfromalist",//简单的描述
Long:`randomlyselectstringfromalist`,//详细描述
Run:func(cmd*cobra.Command,args[]string){
//在这里加入/调用你的主要逻辑
funcinit(){
//注册到根命令下
rootCmd.AddCommand(autoSelectorCmd)
//Hereyouwilldefineyourflagsandconfigurationsettings.
//CobrasupportsPersistentFlagswhichwillworkforthiscommand
//andallsubcommands,e.g.:
//autoSelectorCmd.PersistentFlags().String("foo","","Ahelpforfoo")
//Cobrasupportslocalflagswhichwillonlyrunwhenthiscommand
//iscalleddirectly,e.g.:
//autoSelectorCmd.Flags().BoolP("toggle","t",false,"Helpmessagefortoggle")
实现我们的功能
我们可以创建一个pkg包来存放我们的具体实现逻辑,在cmd中只需要做简单的调用即可
import(
"math/rand"
"time"
//简单实现逻辑
funcAutoSelect(inputs[]string)(selectedstring,errerror){
source:=rand.NewSource(time.Now().UnixNano())
r:=rand.New(source)
randomIndex:=r.Intn(len(inputs))
selected=inputs[randomIndex]
returnselected,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初三道德与法治中考复习:开放性设问之倡议书、标语与活动方案专项突破教案
- 《装饰工程灯具采购合同实务解析》教案-面向高职工程造价专业二年级
- 2026宁波大美海湾旅游开发有限公司招聘1人笔试模拟试题及答案详解
- 2026山西运城河津市中医医院招聘正式在编人员2人笔试备考试题及答案详解
- 2026西工大化学与化工学院博士后招聘58人笔试备考题库及答案详解
- 建筑施工消防演练方案及流程
- 2026山东滨城区国有企业招聘工作人员13人笔试备考题库及答案详解
- 2026河北石家庄深泽县医共体集团公开招聘工作人员34名笔试模拟试题及答案详解
- 2026三峡陆上新能源总部社会招聘40人(第一批内蒙古)笔试参考题库及答案详解
- 2026浙江金华义乌市稠城街道社区卫生服务中心编外聘用人员招聘4人笔试参考题库及答案详解
- 2025年下半年安徽省港航集团有限公司所属企业社会公开招聘22名考试参考试题及答案解析
- 安眠药服用安全知识培训课件
- 电机学教案本
- (正式版)DB42∕T 1787.4-2021 《科技馆展览教育通 用要求 第4部分:说明牌》
- 【MOOC答案】《智能仪器设计技术》(东南大学)章节期末慕课答案
- Zippo-2024原版年册完整集合系列
- 盒子记号打印器设计
- 租赁模板脚手架维修保养技术规范
- 《电力管理信息系统工程初步设计文件内容深度规定》编制说明
- TSG G7001-2015 锅炉监督检验规则
- 贵州光伏项目可行性研究报告
评论
0/150
提交评论