我有一个带有默认选项的命令 - 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 会怎样。谢谢!
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
我希望有一种更惯用的方式来完成
我认为有,这就是我试图在评论中传达的想法:不要提供多种方式来在命令行上指定相同的选项。
在位置参数与选项之间进行选择时,问题通常是“这个值是命令运行的对象吗?”。例如,像这样的命令rm
对文件进行操作,因此文件被指定为位置参数:我们不需要写rm -f file1 -f file2 -f file3
,等等。
同样,该ssh
命令连接到远程主机,因此主机名是一个位置参数。有关该连接的元数据(要使用的身份、要使用的端口、配置选项等)也被指定为命令行选项。
你的问题有点难以回答,因为你还没有告诉我们你的命令实际上做了什么。如果每次调用都需要“id”,cmd
并且它标识了命令操作的对象,那么您应该只将它设为位置参数:
cmd 81313
如果在某些情况下您不需要指定 ID,那么它应该是一个可选参数:
cmd -i 81313
在某些情况下,您可能有“强制性选择”,但这种情况相对较少。
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消