在 Cobra Command 中不使用标志选项?

我有一个带有默认选项的命令 - id。可能还有其他标志,因此可以调用以下任何一个。

cmd 81313 # 81313 is the ID
cmd -i 81313cmd -f foo.txt 81313
cmd -i 81313 -f foo.txt
cmd 81313 -f foo.txt

使用 Cobra 命令处理此问题的正确方法是什么?

目前,我正在查看的值-i,如果它为空,则从中读取值cmdArgs(如果其中有内容,并且没有标志,那么我假设它是我的 ID)。

然而,这似乎更容易出错——例如,如果有人放下 2 个 ID 会怎样。

谢谢!


繁星coding
浏览 91回答 1
1回答

米琪卡哇伊

我希望有一种更惯用的方式来完成我认为有,这就是我试图在评论中传达的想法:不要提供多种方式来在命令行上指定相同的选项。在位置参数与选项之间进行选择时,问题通常是“这个值是命令运行的对象吗?”。例如,像这样的命令rm对文件进行操作,因此文件被指定为位置参数:我们不需要写rm -f file1 -f file2 -f file3,等等。同样,该ssh命令连接到远程主机,因此主机名是一个位置参数。有关该连接的元数据(要使用的身份、要使用的端口、配置选项等)也被指定为命令行选项。你的问题有点难以回答,因为你还没有告诉我们你的命令实际上做了什么。如果每次调用都需要“id”,cmd并且它标识了命令操作的对象,那么您应该只将它设为位置参数:cmd 81313如果在某些情况下您不需要指定 ID,那么它应该是一个可选参数:cmd -i 81313在某些情况下,您可能有“强制性选择”,但这种情况相对较少。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go