如何解决了解如何构建Go Source
我对如何布局我的Go项目然后如何构建它感到困惑。我是Go的新人,我相信在设置为 。我暂时不将代码托管在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看起来如下 包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
时,它将在当前目录中的所有main
文件中查找.go
函数。它不会构建整个项目。但这在这种情况下不会有问题。
您导入的软件包错误。要导入的软件包名称必须为mycompany/mymodule/internal
而不是mycompany/mymodule/internal/helper
。
要在另一个包中调用函数,必须将其暴露给外部。
因此,您必须将函数greet()
声明为Greet()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。