我很难将本地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文件(带有相关的测试)?
3 回答
目录中的任意数量的文件都是单个包;在一个文件中声明的符号可供其他人使用,而不需要任何
import
或限定符 . 所有文件都需要在顶部使用相同的package foo
声明(或者您将从go build
获得错误) .您需要
GOPATH
设置为pkg
,src
和bin
目录所在的目录 . 这只是一个偏好问题,但对于所有应用程序(有时$HOME
)而言,通常只有一个工作区,而不是每个应用程序一个 .通常Github路径是
github.com/username/reponame
(不仅仅是github.com/xxxx
) . 所以如果你想拥有main
和另一个包,你最终可能会在workspace/src
之下做一些事情请注意,始终使用完整的
github.com/...
路径导入:工作空间中不允许相对导入 . 如果您厌倦了键入路径,请使用goimports
. 如果你正在使用go run
,那么是时候切换到go build
:run
与多文件main
交易不好而且我没有费心去测试但是听到(来自Dave Cheney here)go run
没有重建脏依赖项 .听起来像你仍然卡住,可能包括你如何设置环境变量(命令等)以及你运行的命令和发生了什么错误 . Here are instructions on how to set it (and make the setting persistent) under Linux/UNIX和here is the Go team's advice on workspace setup . 也许两者都没有帮助,但是如果你感到困惑,请看看并至少指出哪个部分会让你困惑 .
只要声明
a.go
和b.go
在同一个包中,就不需要导入 . 然后,您可以使用go run
识别多个文件:在这种情况下:
main.go import "./a"
它可以调用a.go和b.go中的函数,即带有首字母大写字母 .