2016-08-01 23 views
1

我正在构建一个CLI工具来开始学习一些Go。我发现这种流行的包,我想使用一些像这样的命令:了解带标志的子命令

http://godoc.org/github.com/jessevdk/go-flags#Group
https://github.com/jessevdk/go-flags

ex list todos 
ex list todos --completed 
ex list events 
ex list todos events 
ex authenticate 

我的理解是ex将是我的主要命令的方式。
listauthenticate是子命令。

但什么是在这种情况下todosevents?那么--completed会是什么。是--completed叫做Option?这是我看到的神秘人,但不知道我是否正确阅读。我试图找到一个具有不同选项的示例,例如此场景,但我找不到一个。我尝试使用urfave/cli,它首先运行良好,直到我找到一个要求能够将多个实体传递到ex list,如ex list todos events。提前致谢!

回答

1

我已经在多个项目上使用jessevdk/go-flags,并且非常喜欢它。文档很少,但代码很干净,所以在很多方面都是自我记录。

我会尽量解决您的问题,尽我所能:

ex将是你的二进制文件,通常是所有顶级命令的“主”结构(如https://github.com/concourse/fly/blob/master/commands/fly.go)。这将在你的主函数中被解析(例如https://github.com/concourse/fly/blob/master/main.go)。

todosevents居然会被子的第一级。您可以使用您在'master'命令结构中定义命令的相同方式在第一级命令(list)上定义这些命令。

--completed的确是一种选择。使用去-旗帜在广场CI CLI https://github.com/concourse/fly一个开源项目的

一个例子。虽然它不像你想要的那样嵌套命令,但它为go-flags的使用提供了坚实的基础。

+0

在50行的fly.go底部,有'var Fly FlyCommand'。为什么这需要?如果没有第50行的声明,你能不能引用另一个包中的FlyCommand? – Crystal

+1

是的,那就是创建一个'FlyCommand'结构的实例,以便它可以填充值。你会在'main()'函数中看到该变量的地址被传递给'NewParser()'中的解析器。然后,当调用Parse()时,go-flags通过命令/选项结构填充适当的字段。 – Corbin

0

如果您正在尝试学习Go,请不要使用外部软件包,请使用核心库,例如标志。