package main import ( "context" "fmt" "os" "os/signal" "syscall" "git.nobla.cn/golang/aeus/tools/gen/internal/generator" "git.nobla.cn/golang/aeus/tools/gen/internal/types" "github.com/spf13/cobra" ) func waitingSignal(ctx context.Context, cancelFunc context.CancelFunc) { ch := make(chan os.Signal, 1) signals := []os.Signal{syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL} signal.Notify(ch, signals...) select { case <-ctx.Done(): case <-ch: cancelFunc() close(ch) } } func createCommand() *cobra.Command { var ( version string ) cmd := &cobra.Command{ Use: "new", Short: "Create microservice application", Long: "Create microservice application", RunE: func(cmd *cobra.Command, args []string) (err error) { if len(args) == 0 { return fmt.Errorf("Please specify the package name") } if version, err = cmd.Flags().GetString("version"); err != nil { return } return generator.Geerate(&types.Applicetion{ Package: args[0], Version: version, }) }, } cmd.Flags().StringP("version", "v", "v0.0.1", "Application version") return cmd } func main() { var ( err error ) ctx, cancelFunc := context.WithCancel(context.Background()) cmd := &cobra.Command{ Use: "aeus", Short: "aeus is a tool for manager microservices", Long: "aeus is a tool for manager microservice application", SilenceErrors: true, } go waitingSignal(ctx, cancelFunc) cmd.AddCommand(createCommand()) if err = cmd.ExecuteContext(ctx); err != nil { fmt.Println(err.Error()) } cancelFunc() }