我想创建一个包含main函数的包,并使用flag包来指定参数。
此外,我希望能够将此包包含在其他包中,并使用类似于在cli上传递args的语法来调用它的方法。可能类似
err := myPackage.setFlags(args ...string)
out, err := myPackage.exec()
我希望包含的包具有主要功能的一些原因是:
它使我能够将程序包作为独立的可执行文件分发。我的用户可能不需要完整的系统
它可以使手动故障排除更容易
我应该将所有内容分开并使用os \ exec吗?
我是否应该为每个包创建独立包装器(可能会生成这些?)并直接从整个系统调用导出的函数而不执行setFlags操作?
我可以遵循这样的好设计模式吗?
还是我想出一个反模式?
答案 0 :(得分:2)
一个常见的模式是在项目中有一个cmd
pkg,其中包含可执行文件。
像这样的东西
cmd/
foo/main.go
pkg/
foo/foo.go
cmd/foo
导入pkg/foo
并处理命令行标志。 pkg/foo
是包含所有库代码的包。此模式允许其他人导入pkg/foo
,而cmd/foo
也会为您提供名为foo
的可执行文件。