我在将本地 go 文件导入另一个 go 文件时遇到困难。
我的项目结构如下所示
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
我正在尝试在 b.go 中导入 a.go。我尝试了以下,
import "a"
import "github.com/xxxx/a"
这些都不起作用..我知道我必须干预 GOPATH 但我做对了。目前我的 GOPATH 指向 samplego(/workspace/samplego)。我收到以下错误
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)
另外,当这些源文件被导入到另一个项目/模块时,GOPATH 是如何工作的?那么本地进口会成为问题吗?在这种情况下,最佳做法是什么——是否在模块中只有一个 go 文件(带有相关测试)?
原文由 g0c00l.g33k 发布,翻译遵循 CC BY-SA 4.0 许可协议
目录中的任意数量的文件都是一个包;一个文件中声明的符号可供其他文件使用,无需任何
import
s 或限定符。所有文件都需要在顶部使用相同的package foo
声明(否则您会收到来自go build
的错误)。You do need
GOPATH
set to the directory where yourpkg
,src
, andbin
directories reside.这只是一个偏好问题,但所有应用程序都有一个工作区(有时$HOME
)是很常见的,而不是每个应用程序一个。通常 Github 路径是
github.com/username/reponame
(不仅仅是github.com/xxxx
)。所以如果你想要main
和另一个包,你可能最终会在workspace/src
比如请注意,您始终使用完整的
github.com/...
路径导入:工作区中不允许相对导入。如果您厌倦了键入路径,请使用goimports
。 If you were getting by withgo run
, it’s time to switch togo build
:run
deals poorly with multiple-filemain
s and I没有费心去测试,但听说(从戴夫切尼 这里)go run
不重建脏依赖。听起来您至少已经尝试将 GOPATH 设置为正确的东西,所以如果您仍然卡住,也许包括您如何设置环境变量(命令等)以及您运行了什么命令以及发生了什么错误。 Here 是关于如何在 Linux/UNIX 下设置它(并使设置持久化)的说明, 这是 Go 团队关于工作区设置的建议。也许两者都无济于事,但请看一下,如果您感到困惑,至少要指出哪一部分让您感到困惑。