96SEO 2026-02-19 23:56 0
。

因此#xff0c;为了对代码之后的代码学习的有比较深入的理解#xff0c;因此先基于这个库写个demo#xff0c;加深对这个库的一些理解吧
打开k8s代码的时候我发现基本上那几个核心服务都是使用cobra库作为命令行处理的能力。
因此为了对代码之后的代码学习的有比较深入的理解因此先基于这个库写个demo加深对这个库的一些理解吧
在这里了Cobra是一个用Go语言实现的命令行工具。
并且现在正在被很多项目使用例如Kubernetes、Hugo和Github
CLI等。
通过使用Cobra我们可以快速的创建命令行工具特别适合写
但是我们在使用到时候需要针对命令行进行各种解析判断但是有了这个库我们就可以减少这段冗余的代码了
话不多说我们直接给出怎么用这个项目。
我的环境是在macos上。
github.com/spf13/cobra-clilatest
因为我本身我的golang代码路径已经建好了bin目录因此执行完该命令后,如下
/Users/XXX/workspace/golang/src/greet
刚刚生成的文件因为没有加具体的命令选项可能用处不大因此我们继续执行添加一个命令字
greetCmd.PersistentFlags().String(foo,
e.g.:greetCmd.Flags().BoolP(toggle,
cmd.Flags().GetInt32(goroutine)p,
cmd.Flags().GetInt32(packet)fmt.Println(mockmsg
cmd.Flags().GetInt32(goroutine)p,
cmd.Flags().GetInt32(packet)fmt.Println(mockmsg
我主要是看了kubctl模块的代码我发现这个模块对cmd这块又进行了更丰富的封装用以支持更加复杂的场景。
NewDefaultKubectlCommandWithArgs(KubectlOptions{PluginHandler:
NewDefaultPluginHandler(plugin.ValidPluginFilenamePrefixes),Arguments:
defaultConfigFlags().WithWarningPrinter(ioStreams),IOStreams:
因为kubectl是可以对文件以及flag进行处理使用的因此需要针对这种情况各种设置参数我们发现已经充分利用了cmd结构体的内各个字段
这两个方法是核心方法基本上是初始化并赋值给command的结构了
NewDefaultKubectlCommandWithArgs
NewDefaultKubectlCommandWithArgs(o
rest.NewWarningWriter(o.IOStreams.ErrOut,
rest.WarningWriterOptions{Deduplicate:
term.AllowsColorOutput(o.IOStreams.ErrOut)})warningsAsErrors
我么看到的kubectl的命令的使用地方了因为本文主要是讲command的使用因此k8s的其他get命令等先不赘述下一篇在讲
Use这是一个字符串用于描述命令的基本使用方式。
它规定了命令所需的参数和可选参数的格式为用户提供了简洁明了的使用指导。
-
Aliases一个字符串切片存储了该命令的别名。
这使得用户可以通过不同的名称来调用同一个命令增加了命令使用的灵活性。
-
SuggestFor也是一个字符串切片其中包含了此命令可能被建议替代的其他命令名称。
这有助于在用户输入类似但不完全准确的命令时提供相关的建议。
Short一个简短的字符串用于在帮助输出中提供命令的简短描述让用户快速了解命令的主要功能。
-
GroupID指定该子命令在其父命令的“帮助”输出中所属的组标识便于对命令进行分组展示和管理。
此命令”输出中提供更全面和深入的命令描述包括更多的功能细节、使用示例、注意事项等。
Example包含命令使用的示例字符串通过实际的例子帮助用户更好地理解如何正确使用该命令。
ValidArgs一个字符串切片列出了在外壳自动补全中所有有效的非标志参数。
ValidArgsFunction一个函数动态地提供有效的非标志参数用于外壳自动补全是一种更灵活的参数提供方式。
ArgAliases一个字符串切片列出了有效参数的别名这些别名不会在外壳自动补全中被提示但手动输入时会被接受。
Deprecated如果命令已被弃用存储了使用该命令时将显示的提示信息告知用户该命令不应再被使用。
Annotations一个键值对映射允许应用程序为命令添加自定义的标识、分组或特殊选项等元数据。
PersistentPreRunE在命令执行前被调用且子命令会继承并执行用于进行一些持久的预处理操作。
-
PreRunE在命令执行前被调用但子命令不会继承用于特定于当前命令的预处理。
-
commandgroups一个指针切片指向子命令所属的组对象。
globNormFunc一个全局的标准化函数用于处理标志名称的标准化。
usageFunc用户定义的使用函数用于自定义命令的使用说明。
helpCommand具有“帮助”用途的命令如果用户未定义则使用默认的帮助命令。
completionCommandGroupID自动完成命令所属的组标识。
FParseErrWhitelist要忽略的标志解析错误的列表。
CompletionOptions用于控制外壳自动完成的选项。
commandsAreSorted一个布尔值指示命令切片是否已排序。
commandCalledAs一个结构体记录命令被调用时的名称和是否被调用的状态。
TraverseChildren一个布尔值决定是否在执行子命令之前解析所有父命令的标志。
Hidden如果为真该命令将在可用命令列表中隐藏不向用户显示。
SilenceErrors一个布尔值用于控制是否静默处理错误。
SilenceUsage一个布尔值用于控制在发生错误时是否静默使用信息。
DisableFlagParsing如果为真将禁用标志解析所有标志将作为参数传递给命令。
DisableAutoGenTag如果为真在生成文档时将禁用自动生成的标签。
DisableFlagsInUseLine如果为真将在使用行中禁用标志的添加。
DisableSuggestions如果为真将禁用基于编辑距离的建议功能。
SuggestionsMinimumDistance定义显示建议的最小编辑距离必须大于
本篇文章主要是一步步的吧cobra这个库如何使用等进行了详细的解释我们在使用这个库的时候比较能够理解他工作的原理然后再根据具体的k8s如何使用以及具体字段的使用来充分发挥cmd的能力和价值
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback