Skip to content

Latest commit

 

History

History
219 lines (132 loc) · 6.53 KB

[不背锅运维]-2023-7-27-Go:使用Cobra打造强大命令行应用.md

File metadata and controls

219 lines (132 loc) · 6.53 KB

Go:使用Cobra打造强大命令行应用

原创 tantianran 不背锅运维

不背锅运维

微信号 noblameops

功能介绍 运维非简单重复劳动,背锅有理有据应对。注重运维实战,我们比谁都拼!日常分享实用干货,助你成为运维大神!遇见不背锅,遇见更好的自己。


__发表于

收录于合集 #Dev 35个

开篇

作为一名运维工程师,我们经常需要编写命令行工具来管理和监控系统。在这方面,Cobra是一个强大的开源工具,能够帮助我们快速构建出优雅且功能丰富的命令行应用。Cobra是基于Go语言开发的一个命令行库,提供了一套简单而强大的API,可以帮助我们定义命令、子命令、标志和参数等。使用Cobra,我们能够轻松创建具有交互性、易用性和可扩展性的命令行应用。

模拟实战场景

本篇分享它的基本使用,模拟一个运维场景来开发一个命令行应用,假设需要一个工具来查询服务器的状态和资源使用情况。我将使用Cobra来构建这个应用,并实现两个命令:一个用于查询服务器状态,另一个用于查询服务器资源使用情况。

开始实战

首先,需要在Go环境中安装Cobra库和安装Cobra命令行工具(cobra-cli)。通过以下命令,可以获取Cobra的源代码并进行安装:

tantianran@ubuntu:~/gocode/src/cobra-demo$ go get -u github.com/spf13/cobra@latest  
tantianran@ubuntu:~/gocode/src/cobra-demo$ go install github.com/spf13/cobra-cli@latest  

安装完成后,就可以开始使用Cobra来构建命令行应用了。

创建cobra-demo模块并启动Cobra CLI应用程序

tantianran@ubuntu:~/gocode/src$ mkdir cobra-demo  
tantianran@ubuntu:~/gocode/src$ cd cobra-demo/  
tantianran@ubuntu:~/gocode/src/cobra-demo$ go mod init  
tantianran@ubuntu:~/gocode/src/cobra-demo$ cobra-cli init  

执行上述命令后,其中包含了应用的基本结构:

tantianran@ubuntu:~/gocode/src/cobra-demo$ tree  
.  
├── cmd  
│   └── root.go  
├── go.mod  
├── go.sum  
├── LICENSE  
└── main.go  

接下来,我们需要定义两个子命令:一个用于查询服务器状态,另一个用于查询服务器资源使用情况。在cobra- demo/cmd文件夹下创建两个名为status.go和resources.go的文件,并编写以下代码:

cmd/status.go:

package cmd  
  
import (  
 "fmt"  
  
 "github.com/spf13/cobra"  
)  
  
func getStatus(cmd *cobra.Command, args []string) {  
 // 实现查询服务器状态的逻辑  
 fmt.Println("Server status: Running")  
}  
  
func init() {  
 rootCmd.AddCommand(statusCmd)  
}  
  
var statusCmd = &cobra.Command{  
 Use:   "status",  
 Short: "Get server status",  
 Run:   getStatus,  
}  

cmd/resources.go:

package cmd  
  
import (  
 "fmt"  
  
 "github.com/spf13/cobra"  
)  
  
func getResources(cmd *cobra.Command, args []string) {  
 // 实现查询服务器资源使用情况的逻辑  
 fmt.Println("Server resources usage:")  
 fmt.Println("- CPU: 80%")  
 fmt.Println("- Memory: 4GB used, 8GB total")  
}  
  
func init() {  
 rootCmd.AddCommand(resourcesCmd)  
}  
  
var resourcesCmd = &cobra.Command{  
 Use:   "resources",  
 Short: "Get server resources usage",  
 Run:   getResources,  
}  

接着,在server/main.go文件中,将以下代码:

import "cobra-demo/cmd"  
  
func main() {  
 cmd.Execute()  
}  

现在,已经完成了命令的定义和逻辑实现(当然是模拟的)。可以使用以下命令构建和运行应用:

tantianran@ubuntu:~/gocode/src/cobra-demo$ go build -o cobra-demo ./main.go  
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo -h  
这仅仅只是用于测试, 它是一个demo, 并没有实际用途.  
  
Usage:  
  cobra-demo [flags]  
  cobra-demo [command]  
  
Available Commands:  
  completion  Generate the autocompletion script for the specified shell  
  help        Help about any command  
  resources   Get server resources usage  
  status      Get server status  
  
Flags:  
  -h, --help     help for cobra-demo  
  -t, --toggle   Help message for toggle  
  
Use "cobra-demo [command] --help" for more information about a command.  
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo resources  
Server resources usage:  
- CPU: 80%  
- Memory: 4GB used, 8GB total  
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo status  
Server status: Running  
tantianran@ubuntu:~/gocode/src/cobra-demo$  

通过以上命令,我们可以分别查询服务器的状态和资源使用情况。

通过这个模拟的示例,展示了如何使用Cobra创建一个命令行应用,可以根据实际需要进一步扩展和定制,例如添加更多的子命令、标志和参数。

最后再附上最终的项目结构:

tantianran@ubuntu:~/gocode/src/cobra-demo$ tree  
.  
├── cmd  
│   ├── resources.go  
│   ├── root.go  
│   └── status.go  
├── cobra-demo # 这个是刚编译好的二进制  
├── go.mod  
├── go.sum  
├── LICENSE  
└── main.go  

最后

最后,做个简单总结。Cobra是一款强大的命令行库,能够帮助运维工程师快速构建出功能丰富的命令行应用。通过使用Cobra,能够提高开发效率、减少编码工作量,并创建易于使用和可扩展的命令行工具,为我们的运维工作带来便利和效益。速度玩起来!让Cobra成为你打造命令行应用的得力工具!

预览时标签不可点

微信扫一扫
关注该公众号

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许

: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看