猿问

了解如何构建 Go 源代码

我对如何布局我的 Go 项目以及如何构建它感到困惑。我对 Go 相当陌生,并且相信在 <1.13 的时候 GOPATH 很重要。我使用的是 1.14,所以我相信我不必关心这一点,并且没有设置 GOPATH。我不(目前)在 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: 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当然应该能够构建我的整个项目,对吧?包括所有依赖项。有人可以告诉我我错过了什么吗?


杨__羊羊
浏览 133回答 1
1回答

红糖糍粑

当您在go build不指定文件路径的情况下运行时,它将在当前目录的main任何文件中查找该函数.go以启动。它不会构建整个项目。但在这种情况下不会有问题。您正在导入错误的包。要导入的包名mycompany/mymodule/internal不能是mycompany/mymodule/internal/helper.并且要调用另一个包内的函数,它必须暴露给外部。所以你必须将函数声明greet()为Greet()
随时随地看视频慕课网APP

相关分类

Go
我要回答