需要帮助理解 Golangs 包和模块系统的混淆

问题描述

老实说,Golang 的包和模块系统是我遇到过的最令人恼火和不必要的复杂事情。我不知道是我不明白,还是缺乏关于这个主题的信息,或者只是一般的 golang。

我创建了一个 Go 项目,我现在不想发布或上传到 GitHub。它不在我设置的 GOPATH 内,因为根据我对模块引入的理解,您可以在 GOPATH 之外对您的项目进行编码。 项目布局是这样的

──── MyProject
     ├─── project
     │    ├─── pkg1
     │    │    └─── foo.go
     │    ├─── pkg2
     │    │    └─── bar.go
     │    └─── go.mod
     └─── test
          └─── test.go

test.go 中,我希望我可以做类似 import "project/pkg1" 的事情,但我不明白如何让它发挥作用。即使我在项目中移动 test.go 并输入 import "/pkg1",我也会收到 Cannot import absolute path 错误

我真的不想一直在 %GOPATH%/src 中编写我所有的 Go 项目,不得不这样做似乎很荒谬。

同样,这可能只是我不理解。我来自 pythonic 背景,我可以创建一个 setup.py 文件,在运行后将我的项目安装到 python 的路径以备将来使用。任何有关此问题的帮助,无论是指向教程或网站的链接,我们都将不胜感激,谢谢。

解决方法

如果您是 go 新手,我建议您使用 go.mod 和平面项目结构。使用实际代码保留您的测试。任何以 _test.go 为后缀的内容都不会包含在内。

go.mod
foo.go
foo_test.go
bar.go
bar_test.go

如果这是一个库,请随意输入包名称。

如果这是一个可执行应用程序,请将 main 设置为根包名称。