您的位置:首页 > 房产 > 家装 > 建个公司网站要多少钱_黔彩终端效果图_智慧软文发布系统_网站宣传方法

建个公司网站要多少钱_黔彩终端效果图_智慧软文发布系统_网站宣传方法

2025/1/8 11:05:57 来源:https://blog.csdn.net/fcopy/article/details/143876894  浏览:    关键词:建个公司网站要多少钱_黔彩终端效果图_智慧软文发布系统_网站宣传方法
建个公司网站要多少钱_黔彩终端效果图_智慧软文发布系统_网站宣传方法

命令行参数与命令行选项

命令行的命令包括

command:命令
args:事务
flags:标志或选项

推荐的结构
在这里插入图片描述

标志类型:
持久标志:当前命令以及子命令与其继承命令 — PersistentFlags()
全局标志:由持久标志衍生
本地标志:当前命令可用

创建root.go文件

package cmdimport ("fmt""github.com/spf13/cobra"
)var rootCmd = &cobra.Command{Use:   "mycobra",Short: "简短的描述",Long:  "详细的描述",
}func Execute() {rootCmd.Execute()
}var userLicense stringfunc init() {rootCmd.PersistentFlags().Bool("viper", true, "是否采用viper作为配置文件读取")rootCmd.PersistentFlags().StringP("auther", "a", "YOUR NAME", "作者名称")rootCmd.PersistentFlags().StringVarP(&userLicense, "licence", "l", "", "授权信息")rootCmd.Flags().StringP("source", "s", "", "来源")}

使用

 go run .\main.go --help

查看定义的命令参数

在这里插入图片描述

创建init.go文件

package cmdimport ("fmt""github.com/spf13/cobra"
)var initCmd = &cobra.Command{Use:     "init",Short:   "init short",Long:    "init long",Aliases: []string{"createss"}, //别名Run: func(cmd *cobra.Command, args []string) {fmt.Println("执行init子命令 start")author, _ := cmd.Root().PersistentFlags().GetString("author")viper, _ := cmd.Root().PersistentFlags().GetBool("viper")license, _ := cmd.Root().PersistentFlags().GetString("licence")fmt.Printf("author is :%s; viper is %v; license is %s\n", author, viper, license)fmt.Println("执行init子命令 end")},
}func init() {rootCmd.AddCommand(initCmd)
}

执行
在这里插入图片描述

参数验证与内置参数验证器

创建args.go

package cmdimport ("errors""fmt""github.com/spf13/cobra"
)// 自定义验证
var curArgsCheckCmd = &cobra.Command{Use:   "cus",Long:  "",Short: "",Args: func(cmd *cobra.Command, args []string) error {if len(args) < 1 {return errors.New("至少输入一个参数")}if len(args) > 2 {return errors.New("最多输入两个参数")}return nil},Run: func(cmd *cobra.Command, args []string) {fmt.Println("自定义参数验证  start")fmt.Println(args)fmt.Println("自定义参数验证  end")},
}// 无参数验证
var noArgsCmd = &cobra.Command{Use: "noArgs",
}// 可以接受任何参数
var arbitrayArgsCmd = &cobra.Command{}var onlyArgsCmd = &cobra.Command{}// 恰好多少个参数
var exactArgsCmd = &cobra.Command{}// 最大
var maxArgsCmd = &cobra.Command{}//最小func init() {rootCmd.AddCommand(curArgsCheckCmd)}

检查自定义验证

在这里插入图片描述
在这里插入图片描述
接下来同理测试其他的参数格式

package cmdimport ("errors""fmt""github.com/spf13/cobra"
)// 自定义验证
var curArgsCheckCmd = &cobra.Command{Use:   "cus",Long:  "",Short: "",Args: func(cmd *cobra.Command, args []string) error {if len(args) < 1 {return errors.New("至少输入一个参数")}if len(args) > 2 {return errors.New("最多输入两个参数")}return nil},Run: func(cmd *cobra.Command, args []string) {fmt.Println("自定义参数验证  start")fmt.Println(args)fmt.Println("自定义参数验证  end")},
}// 无参数验证
var noArgsCmd = &cobra.Command{Use:  "noArgs",Args: cobra.NoArgs,RunE: func(cmd *cobra.Command, args []string) error {fmt.Println("无参数验证")return nil},
}// 可以接受任何参数
var arbitrayArgsCmd = &cobra.Command{Use:  "ab",Args: cobra.ArbitraryArgs,RunE: func(cmd *cobra.Command, args []string) error {fmt.Println("接收任何参数")fmt.Println(args)return nil},
}var onlyArgsCmd = &cobra.Command{Use:       "only",Args:      cobra.OnlyValidArgs,ValidArgs: []string{"123", "456", "789"},RunE: func(cmd *cobra.Command, args []string) error {fmt.Println("only参数验证  start")fmt.Println(args)fmt.Println("only参数验证  end")return nil},
}// 恰好多少个参数
var exactArgsCmd = &cobra.Command{Use:  "exact",Args: cobra.ExactArgs(2),RunE: func(cmd *cobra.Command, args []string) error {fmt.Println("恰好两个参数验证  start")fmt.Println(args)fmt.Println("恰好两个参数验证   end")return nil},
}func init() {rootCmd.AddCommand(curArgsCheckCmd)rootCmd.AddCommand(noArgsCmd)rootCmd.AddCommand(arbitrayArgsCmd)rootCmd.AddCommand(onlyArgsCmd)rootCmd.AddCommand(exactArgsCmd)
}

无参数验证:
在这里插入图片描述
可接受任意参数:
在这里插入图片描述
只能输入指定参数:

	ValidArgs: []string{"123", "456", "789"},

在这里插入图片描述
恰好两个参数:
在这里插入图片描述

钩子函数定义与使用

四个钩子函数执行顺序:

PersistentPreRun --》
PreRun --》
Run --》
PostRun --》
PersistentPostRun --》

在这里插入图片描述

接下来,我们来看继承

package cmdimport ("fmt""github.com/spf13/cobra"
)var hookRootCmd = &cobra.Command{Use: "hookroot",Run: func(cmd *cobra.Command, args []string) {fmt.Println("钩子案例,run函数")},PersistentPreRun: func(cmd *cobra.Command, args []string) {//run函数之前执行fmt.Println("PersistentPreRun")},PersistentPostRun: func(cmd *cobra.Command, args []string) {//run函数之后执行fmt.Println("PersistentPostRun")},PreRun: func(cmd *cobra.Command, args []string) {//	run之前fmt.Println("PreRun")},PostRun: func(cmd *cobra.Command, args []string) {//run之后fmt.Println("PostRun")},
}var hookSubCmd = &cobra.Command{Use: "hooksub",Run: func(cmd *cobra.Command, args []string) {fmt.Println("钩子案例,run函数")},PersistentPostRun: func(cmd *cobra.Command, args []string) {//run函数之后执行fmt.Println("PersistentPostRun")},PreRun: func(cmd *cobra.Command, args []string) {//run之后fmt.Println("PreRun")},
}func init() {rootCmd.AddCommand(hookRootCmd)hookRootCmd.AddCommand(hookSubCmd)
}

在这里插入图片描述
可以看到,我们没有写PersistentPreRun()和PostRun
但是Persistent是可以继承的,所以我们仍然可以继承父亲的PersistentPreRun()
而PostRun()就没有了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com