【发布时间】:2021-08-29 08:00:55
【问题描述】:
老实说,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 的路径以供将来使用。任何有关这方面的帮助,无论是指向教程或网站的链接,都将不胜感激,谢谢。
【问题讨论】:
-
How to Write Go Code 是关于这个主题的一个很好的教程。你不需要将你的 go 项目放在 %GOPATH%/src 中。如果 test.go 与其他代码在同一个项目中进行版本控制,则将 go.mod 移至 MyProject 目录。
-
将导入字符串从“project/pkg1”更改为“/pkg1”是错误的。 Go 中的导入字符串不是路径(尽管它们通常看起来像路径)。每个包都有一个导入字符串,无论您从哪里导入,都应该使用该字符串。
-
模块系统对我来说似乎非常/简单/(即不可配置),但我想这都是相对的;)
-
单元测试放在他们正在测试的包中,也包括 FWIW。工具期望如此。
-
它并不复杂。您只是以完全不恰当的方式使用它。如果你坚持只用 Python 的方式来做,你将不得不使用 Python。
标签: go project go-modules go-packages goimports