猿问

如何让每个眼镜蛇命令解析自己的标志?获取初始化循环(预期,但如何避免?)

我正在遵循https://github.com/spf13/cobra#flags上的指南,但我对那里的一些内容感到困惑。


我有一些服务(rest api、电子邮件服务、事件),我正在尝试做这样的事情:


go run *.go rest -env DEV -p 3000


go run *.go events -env DEV -p 3001


我正在关注 github 页面,所以我定义了我的 rootCmd 和 restCmd:


var rootCmd = &cobra.Command{

    Use: "myappname",

}


var restCmd = &cobra.Command{

    Use:   "rest",

    Short: "REST API",

    Long:  "REST API",

    Run:   runRest,

}

在runRest方法中,我应该做类似的事情吗


var env string

restCmd.Flags().StringVarP(&env, "env", "env", "", "environment")

请告诉我。


谢谢


忽然笑
浏览 115回答 1
1回答

慕后森

每个子命令都可以有自己的标志。您可以按以下方式执行此操作:package mainimport (    "fmt"    "log"    "github.com/spf13/cobra")var rootCmd = &cobra.Command{    Use: "app",}func NewCmdRest() *cobra.Command {    var env string    var restCmd = &cobra.Command{        Use: "rest",        Run: func(cmd *cobra.Command, args []string) {            fmt.Println("rest:", env)        },    }    restCmd.Flags().StringVarP(&env, "env", "e", "", "environment")    return restCmd}func NewCmdEvent() *cobra.Command {    var env string    var eventCmd = &cobra.Command{        Use: "event",        Run: func(cmd *cobra.Command, args []string) {            fmt.Println("event:", env)        },    }    eventCmd.Flags().StringVarP(&env, "env", "e", "", "environment")    return eventCmd}func init() {    rootCmd.AddCommand(NewCmdRest())    rootCmd.AddCommand(NewCmdEvent())}func main() {    if err := rootCmd.Execute(); err != nil {        log.Fatal(err)    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答