最開始的解析命令行參數是使用的標準庫裏面的flag包,後來想增長新的參數的時候比較複雜和困難,所以使用cobra更加簡單一些git
好比執行go-fly server port 8081是運行項目github
執行go-fly install是導入數據庫數據庫
目錄結構:函數
增長cmd目錄,做爲cmd包,代碼中直接定義全局變量和可導出的函數 , root.go裏面是這樣的spa
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的時候打印版本號3d
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) }, }
直接訪問效果:code
加上參數效果:server