Go “错误”;can';t load package:package my_prog:found package my_prog and main;

Go “错误”;can';t load package:package my_prog:found package my_prog and main;,go,Go,在我的GOPATH中,我有如下内容: /bin/ /pkg/ /src/ /src/my_prog/ /src/my_prog/main.go /src/my_prog/d_interface.go /src/my_prog/d_struct_that_implements_the_interface.go 在main.go中,我有package main,在d_接口中。go和d_结构,它实现了_接口。go我有package my_prog 当我尝试去构建我的_prog时,我得到以下错误: c

在我的GOPATH中,我有如下内容:

/bin/
/pkg/
/src/
/src/my_prog/
/src/my_prog/main.go
/src/my_prog/d_interface.go
/src/my_prog/d_struct_that_implements_the_interface.go
main.go
中,我有
package main
,在
d_接口中。go
d_结构,它实现了_接口。go
我有
package my_prog

当我尝试
去构建我的_prog
时,我得到以下错误:

can't load package: package my_prog: found packages my_prog (d_interface.go) and main (main.go) in C:\dev\Code\Go\src\my_prog

这是否意味着属于
package main
的任何文件都应该放在自己的文件夹中?如果是,原因是什么?

是的,每个包都必须在自己的目录中定义

源结构在中定义


软件包是一个可以在多个程序中使用的组件,您可以发布、导入、从URL获取等。因此,它有自己的目录,就像程序有目录一样有意义。

确保软件包安装在
$GOPATH
目录中,或者已经安装在您的工作区/软件包中


例如:如果您的
$GOPATH=“c:\go”
,请确保
c:\go\src\pkgName

中的包。此外,如果您只想将main.go文件拆分为多个文件,则只需将其他文件命名为“package main”,只要您只在其中一个文件中定义main函数,您可以走了。

可以,但主包是否符合独立包的条件?据我所知,包main是提供入口点的语言的一个怪癖(很像Java的类有公共静态main)。实际上,我在我的“main”包中只放了很少的代码,只有那些不能在其他程序中使用的代码。坦率地说,这很烦人。我不认为有理由将主要入口点与程序的其余部分分开。我会接受这个答案。当我制作一个程序时,我经常有许多小的实用程序使用相同的数据/模型/等等。。把所有的东西都放在软件包中,让所有的程序都非常小并使用这些软件包是很方便的。顺便说一句,你可以在接受答案之前稍等片刻,这样其他用户就会有动力给你其他(也许更好)的答案。我还没有尝试安装任何东西,只是在构建程序。该程序依赖于两个软件包。我发现将主包放在
/src/my_-prog/
中,将my_-prog包放在
/src/my_-prog/my_-prog/
中是有效的。