我对如何布局我的 Go 项目以及如何构建它感到困惑。我对 Go 相当陌生,并且相信在 <1.13 的时候 GOPATH 很重要。我使用的是 1.14,所以我相信我不必关心这一点,并且没有设置 GOPATH。我不(目前)在 GitHub 上托管我的代码(这是各种文章所假设的)。我读过很多东西,但这一切都让我更加困惑:https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencieshttps://www.wolfe.id.au/2020/03/10/starting-a-go-project/https://talks.golang.org/2014/organizeio.slide#1我已经根据这个布置了我的项目:https ://github.com/golang-standards/project-layout 。(除了这个项目似乎使用了 Makefile。我不想写 Makefile。我相信这应该在没有 Makefile 的情况下工作。我真的不想写 Makefile。)这是结构:/src /cmd main.go /internal helper.go go.modgo.mod 看起来像这样:module mycompany/mymodule go 1.14service.go 看起来如下 package main // 这必须被称为 'main'import ( "mycompany/mymodule/internal/helper")func main () { helper.greet("Jenny")}所以,如果我进入/src并运行,build cmd/service.go我会得到 cmd/service.go:4:2: package mycompany/mymodule/internal/helper is not in GOROOT (/usr/local/Cellar/go/1.14.5/libexec/src /mycompany/mymodule/internal/helper)我必须先编译helper.go吗?手动?肯定不是。go build当然应该能够构建我的整个项目,对吧?包括所有依赖项。有人可以告诉我我错过了什么吗?
1 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
当您在go build不指定文件路径的情况下运行时,它将在当前目录的main任何文件中查找该函数.go以启动。它不会构建整个项目。但在这种情况下不会有问题。
您正在导入错误的包。要导入的包名mycompany/mymodule/internal不能是mycompany/mymodule/internal/helper.
并且要调用另一个包内的函数,它必须暴露给外部。所以你必须将函数声明greet()为Greet()
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消
