我在完成本应轻松完成的任务时遇到了困难。我了解用于代码组织的 GitHub 模型(即库存储库和使用库的应用程序存储库)。我认为这太棒了。但我经常发现我希望 mylib
与单个 main.go
文件中的简单可执行文件捆绑在一起。 main.go
应该是 package main
并且应该导入 mylib
。换句话说,它应该是关于如何构建使用此库的应用程序的准确文档。
我的观点是,由于提供一个简单的命令行界面来包装您的库通常就足够方便了,因此应该有一种简单的方法可以做到这一点而无需创建另一个 repo,而 golang 应该会有所帮助。
我想要如下内容:
$GOPATH/src/github.com/me/mylib
mylib.go
mylib_also.go
main.go
其中 mylib
是库(package mylib
),main.go
是 package main
并且在运行时go install
它生成bin/mylib
和pkg/mylib.a
。
要么 main.go
应该导入 "github.com/me/mylib"
(如果我现在这样做,我会得到循环导入错误)或者 go
会理解正在发生的事情,因为应该内置此功能,并且 repo 中的 main.go
会生成 exec。可能需要导入(并删除循环错误)是更好的方法。
现在,我要做
$GOPATH/src/github.com/me/mylib
mylib/
mylib.go
main.go
所以我必须导入 github.com/me/mylib/mylib 这很荒谬。
总之,go install
应该允许包的特殊情况和导入包并提供演示包 API 的简单 cli 的 main。 GitHub模型提倡两个repos,但是简单的clis合二为一应该很容易吧!
最佳答案
每个文件夹不能有多个包。 Go 在包级别而不是文件级别运行。
在这种情况下的惯例——一个消耗你的库的二进制文件——是用你的主包创建一个 cmd
文件夹 - 即根据 https://github.com/bradfitz/camlistore/tree/master/cmd或 https://github.com/boltdb/bolt
在您的情况下,这将是:
$GOPATH/src/github.com/me/mylib
mylib/
mylib.go
README.md
cmd/
your-lib-tool/
main.go
关于go - 为什么我不能在 golang 中将 main 添加到我的库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318589/