Golang包必须也可以从cli

时间:2016-08-20 20:10:10

标签: go

我想创建一个包含main函数的包,并使用flag包来指定参数。

此外,我希望能够将此包包含在其他包中,并使用类似于在cli上传递args的语法来调用它的方法。可能类似

err := myPackage.setFlags(args ...string)
out, err := myPackage.exec() 

我希望包含的包具有主要功能的一些原因是:

  • 它使我能够将程序包作为独立的可执行文件分发。我的用户可能不需要完整的系统

  • 它可以使手动故障排除更容易

我应该将所有内容分开并使用os \ exec吗?

我是否应该为每个包创建独立包装器(可能会生成这些?)并直接从整个系统调用导出的函数而不执行setFlags操作?

我可以遵循这样的好设计模式吗?

还是我想出一个反模式?

1 个答案:

答案 0 :(得分:2)

一个常见的模式是在项目中有一个cmd pkg,其中包含可执行文件。

像这样的东西

cmd/
   foo/main.go
pkg/
   foo/foo.go

cmd/foo导入pkg/foo并处理命令行标志。 pkg/foo是包含所有库代码的包。此模式允许其他人导入pkg/foo,而cmd/foo也会为您提供名为foo的可执行文件。