错误"无法加载包:包my_prog:找到包my_prog和main"

The*_*Man 62 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
Run Code Online (Sandbox Code Playgroud)

main.gopackage main,我d_interface.god_struct_that_implements_the_interface.gopackage my_prog.

当我尝试时,go build my_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
Run Code Online (Sandbox Code Playgroud)

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

Den*_*ret 60

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

源结构在How To Write Go Code中定义.

包是一个可以在多个程序中使用的组件,您可以发布,导入,从URL获取等等.因此,只要程序可以拥有一个目录,就可以拥有自己的目录.

  • 坦率地说这很烦人.我没有理由将主入口点与程序的其余部分分开.我会接受这个答案. (4认同)
  • 我还没有尝试安装任何东西,只是构建程序.该程序取决于两个包.我发现将主程序包放在`/ src/my_prog /`中,将my_prog包放在`/ src/my_prog/my_prog /`中. (2认同)

dki*_*zer 14

另外,如果您要做的就是将main.go文件分解为多个文件,那么只要将其他文件命名为"package main",只要您只在其中一个文件中定义main函数,就可以了.走.