在同一文件夹中导入go文件

新手上路,请多包涵

我在将本地 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 许可协议

阅读 569
2 个回答

目录中的任意数量的文件都是一个包;一个文件中声明的符号可供其他文件使用,无需任何 import s 或限定符。所有文件都需要在顶部使用相同的 package foo 声明(否则您会收到来自 go build 的错误)。

You do need GOPATH set to the directory where your pkg , src , and bin directories reside.这只是一个偏好问题,但所有应用程序都有一个工作区(有时 $HOME )是很常见的,而不是每个应用程序一个。

通常 Github 路径是 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 。 If you were getting by with go run , it’s time to switch to go build : run deals poorly with multiple-file main s and I没有费心去测试,但听说(从戴夫切尼 这里go run 不重建脏依赖。

听起来您至少已经尝试将 GOPATH 设置为正确的东西,所以如果您仍然卡住,也许包括您如何设置环境变量(命令等)以及您运行了什么命令以及发生了什么错误。 Here 是关于如何在 Linux/UNIX 下设置它(并使设置持久化)的说明这是 Go 团队关于工作区设置的建议。也许两者都无济于事,但请看一下,如果您感到困惑,至少要指出哪一部分让您感到困惑。

原文由 twotwotwo 发布,翻译遵循 CC BY-SA 3.0 许可协议

只要您声明 a.gob.go 在同一个包中,就不需要导入。然后,您可以使用 go run 识别多个文件:

 $ go run a.go b.go

原文由 Jason Kao 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题