Golang - 如何为包含示例程序的包安排工作区?

时间:2016-02-01 16:10:55

标签: go

我仍然试图绕过Go工作区布局。我有一个包todinfo和一个使用它的示例程序untod

我目前有这样的目录安排:

$GOPATH
+- bin...
+- pkg ...
+- src
   +- github.com
      +- longborough
         +- (others)...
         +- todinfo
            +- todinfo.go
            +- untod.go

我最初在不同的目录中开发了这两个程序。但是,由于untod实际上是todinfo包的一部分,因此将它作为单个项目打包在同一目录中似乎更为明智。

但是当我尝试安装时(为了清楚起见,我将回复包装在三行上):

D:\Development\Go\src\github.com\longborough\todinfo>go install
 can''t load package: package github.com/longborough/todinfo: 
 found packages todinfo (todinfo.go) and main (untod.go) 
 in D:\Development\Go\src\github.com\longborough\todinfo

我希望我错了,但这有点像Java,至少对于那些没有经验的人来说。

我做错了什么?我应该使用什么Go命令来安装包然后安装样本?或者,正确的目录安排是什么?

1 个答案:

答案 0 :(得分:1)

这也让我受益匪浅。可以这样考虑:untod不是todinfo包的一部分,它是todinfo包(库)的使用者。事实上,main根本不是一个包,只是说它有一个入口点,应该编译成二进制文件。

TLDR:您可以将untod放在任何地方。在根中可能是明智的:它将被命名为$GOPATH的最后一个dir组件。或者,如果您有多个二进制文件,请将其放入cmd/untod/untod.go

经过一些更多的开发之后,你可以考虑单独制作一个像github.com/longborough/todinfo-bins这样的回购来让它们分开。

Dave Cheney has some decent advice on the subject.