了解如何构建 Go 源代码
Understanding How to Build Go Source
我对如何布局我的 Go 项目以及如何构建它感到困惑。我是 Go 的新手,我相信在 <1.13 的时候 GOPATH 很重要。我使用的是 1.14,所以我相信我不必关心它并且 GOPATH 是 not 集。我(目前)没有在 GitHub 上托管我的代码(这是各种文章假设的)。我已经阅读了很多东西,但这让我更加困惑:
- https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies
- https://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.mod
go.mod 看起来像这样:
module mycompany/mymodule
go 1.14
service.go 看起来如下
package main // 这必须被调用 'main'
import (
"mycompany/mymodule/internal/helper"
)
func main () {
helper.greet("Jenny")
}
所以,如果我在 /src
并且我 运行 build cmd/service.go
我得到
cmd/service.go:4:2: 包 mycompany/mymodule/internal/helper 不在 GOROOT 中 (/usr/local/Cellar/go/1.14.5/libexec/src/mycompany/mymodule/internal/helper)
我必须先编译 helper.go
吗?手动?当然不是。 go build
应该可以构建我的整个项目吧?包括所有依赖项。有人可以告诉我我缺少什么吗?
当您 运行 go build
没有指定文件路径时,它将在当前目录的任何 .go
文件中寻找 main
函数来启动。它不会构建整个项目。但在这种情况下这不是问题。
您导入了错误的包。要导入的包名称必须是 mycompany/mymodule/internal
而不是 mycompany/mymodule/internal/helper
.
并且要调用另一个包内的函数,它必须暴露给外部。
所以你必须将函数 greet()
声明为 Greet()
我对如何布局我的 Go 项目以及如何构建它感到困惑。我是 Go 的新手,我相信在 <1.13 的时候 GOPATH 很重要。我使用的是 1.14,所以我相信我不必关心它并且 GOPATH 是 not 集。我(目前)没有在 GitHub 上托管我的代码(这是各种文章假设的)。我已经阅读了很多东西,但这让我更加困惑:
- https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies
- https://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.mod
go.mod 看起来像这样:
module mycompany/mymodule
go 1.14
service.go 看起来如下 package main // 这必须被调用 'main'
import (
"mycompany/mymodule/internal/helper"
)
func main () {
helper.greet("Jenny")
}
所以,如果我在 /src
并且我 运行 build cmd/service.go
我得到
cmd/service.go:4:2: 包 mycompany/mymodule/internal/helper 不在 GOROOT 中 (/usr/local/Cellar/go/1.14.5/libexec/src/mycompany/mymodule/internal/helper)
我必须先编译 helper.go
吗?手动?当然不是。 go build
应该可以构建我的整个项目吧?包括所有依赖项。有人可以告诉我我缺少什么吗?
当您 运行 go build
没有指定文件路径时,它将在当前目录的任何 .go
文件中寻找 main
函数来启动。它不会构建整个项目。但在这种情况下这不是问题。
您导入了错误的包。要导入的包名称必须是 mycompany/mymodule/internal
而不是 mycompany/mymodule/internal/helper
.
并且要调用另一个包内的函数,它必须暴露给外部。
所以你必须将函数 greet()
声明为 Greet()