为了账号安全,请及时绑定邮箱和手机立即绑定

使用眼镜蛇验证标志

使用眼镜蛇验证标志

Go
犯罪嫌疑人X 2022-08-24 18:46:17
下面的草图是使用Cobra和Go编写的命令行应用程序。我想抛出一个错误,如果的值与正则表达式不匹配。我该怎么做?flag1^\s+\/\s+package cmdimport (        "fmt"        "os"        "github.com/spf13/cobra"        homedir "github.com/mitchellh/go-homedir"        "github.com/spf13/viper")var flag1 stringvar cfgFile string// rootCmd represents the base command when called without any subcommandsvar rootCmd = &cobra.Command{        Use:   "cobra-sketch",        Short: "Sketch for Cobra flags",  Long: "Sketch for Cobra flags",        Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Flag1 is %s\n", flag1)},}// Execute adds all child commands to the root command and sets flags appropriately.// This is called by main.main(). It only needs to happen once to the rootCmd.func Execute() {        cobra.CheckErr(rootCmd.Execute())}func init() {        cobra.OnInitialize(initConfig)         rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra-sketch.yaml)")  rootCmd.PersistentFlags().StringVar(&flag1, "flag1", "", "Value of Flag 1")}// initConfig reads in config file and ENV variables if set.func initConfig() {        if cfgFile != "" {                // Use config file from the flag.                viper.SetConfigFile(cfgFile)        } else {                // Find home directory.                home, err := homedir.Dir()                cobra.CheckErr(err)                // Search config in home directory with name ".cobra-sketch" (without extension).                viper.AddConfigPath(home)                viper.SetConfigName(".cobra-sketch")        }        viper.AutomaticEnv() // read in environment variables that match        // If a config file is found, read it in.        if err := viper.ReadInConfig(); err == nil {                fmt.Fprintln(os.Stderr, "Using config file:", viper.ConfigFileUsed())        }}
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

假设用户运行如下命令:.“hello”将存储在您分配给标志的变量中,要检查输入是否与任何正则表达式匹配,您可以执行以下操作:cobra-sketch --flag1 "hello"var flag1 string


var rootCmd = &cobra.Command{

    Use:   "cobra-sketch",

        ...

    RunE: func(cmd *cobra.Command, args []string) error {

        // You can also use MustCompile if you are sure the regular expression 

        // is valid, it panics instead of returning an error

        re, err := regexp.Compile(`^\s+\/\s+`)

        if err != nil {

            return err // Handle error

        }


        if !regexp.MatchString(flag1) {

            return fmt.Errorf("invalid value: %q", flag1)

        }


        fmt.Printf("Flag1 is %s\n", flag1)

        return nil

    },

}


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信