[Go]GO语言实战-GO-FLY在线客服cobra库命令行参数解析
最开始的解析命令行参数是使用的标准库里面的flag包,后来想增加新的参数的时候比较复杂和困难,因此使用cobra更加简单一些
比如执行go-fly server port 8081是运行项目
执行go-fly install是导入数据库
目录结构:
增加cmd目录,作为cmd包,代码中直接定义全局变量和可导出的函数 , root.go里面是这样的
package cmd import ( "errors" "fmt" "github.com/spf13/cobra" "os" ) var rootCmd = &cobra.Command{ Use: "go-fly", Short: "go-fly", Long: `简洁快速的GO语言WEB在线客服 https://gofly.sopans.com`, Args:args, Run: func(cmd *cobra.Command, args []string) { }, } func args(cmd *cobra.Command, args []string) error{ if len(args)<1{ return errors.New("至少需要一个参数!") } return nil } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } } func init() { rootCmd.AddCommand(versionCmd) rootCmd.AddCommand(serverCmd) rootCmd.AddCommand(installCmd) }
在入口文件中直接调用Excute方法进行使用
package main import ( "github.com/taoshihan1991/imaptool/cmd" ) func main() { cmd.Execute() }
AddCommand就是在增加参数,比如versionCmd这个实例,定义在了version.go里面 ,执行go-fly version的时候打印版本号
package cmd import ( "fmt" "github.com/spf13/cobra" "github.com/taoshihan1991/imaptool/config" ) var versionCmd = &cobra.Command{ Use: "version", Short: "example:go-fly version", Run: func(cmd *cobra.Command, args []string) { fmt.Println("go-fly "+config.Version) }, }
直接访问效果:
加上参数效果:
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网