Как заставить каждую команду кобры анализировать свои собственные флаги? получение цикла инициализации (ожидается, но как избежать?)
Я следую руководству по https://github.com/spf13/cobra, но меня немного смущает содержание сайта.
У меня есть несколько служб (остальные 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")
Пожалуйста, дайте мне знать.
Спасибо
1 ответ
Решение
Каждая подкоманда может иметь свои собственные флаги. Вы можете сделать это следующим образом:
package main
import (
"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)
}
}