我在将本地 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 文件(带有相关测试)?
一个目录中的任意数量的文件都是一个包;在一个文件中声明的符号可供其他文件使用,无需任何imports 或限定符。所有文件都需要package foo在顶部使用相同的声明(否则您将收到来自 的错误go build)。
import
package foo
go build
你需要GOPATH设置到你的目录pkg,src以及bin目录驻留。这只是一个偏好问题,但通常为您的所有应用程序(有时$HOME)使用一个工作区,而不是每个应用程序一个。
GOPATH
pkg
src
bin
$HOME
通常,Github 路径将是github.com/username/reponame(不仅仅是github.com/xxxx)。所以如果你想拥有main另一个包,你最终可能会做一些workspace/src类似的事情
github.com/username/reponame
github.com/xxxx
main
workspace/src
github.com/ username/ reponame/ main.go // package main, importing "github.com/username/reponame/b" b/ b.go // package b
请注意,您始终使用完整github.com/...路径导入:工作区中不允许相对导入。如果您厌倦了键入路径,请使用goimports. 如果您正在使用go run,那么是时候切换到go build:run处理多文件mains 很糟糕,我没有费心去测试,但听说)go run不会重建脏依赖。
github.com/...
goimports
go run
run
听起来您至少已经尝试将 GOPATH 设置为正确的东西,所以如果您仍然被卡住,也许包括您如何设置环境变量(命令等)以及您运行的命令以及发生了什么错误。