首页 文章

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

提问于
浏览
41

我很难将本地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 回答

  • 41

    目录中的任意数量的文件都是单个包;在一个文件中声明的符号可供其他人使用,而不需要任何 import 或限定符 . 所有文件都需要在顶部使用相同的 package foo 声明(或者您将从 go build 获得错误) .

    您需要 GOPATH 设置为 pkgsrcbin 目录所在的目录 . 这只是一个偏好问题,但对于所有应用程序(有时 $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 . 如果你正在使用 go run ,那么是时候切换到 go buildrun 与多文件 main 交易不好而且我没有费心去测试但是听到(来自Dave Cheney herego run 没有重建脏依赖项 .

    听起来像你仍然卡住,可能包括你如何设置环境变量(命令等)以及你运行的命令和发生了什么错误 . Here are instructions on how to set it (and make the setting persistent) under Linux/UNIXhere is the Go team's advice on workspace setup . 也许两者都没有帮助,但是如果你感到困惑,请看看并至少指出哪个部分会让你困惑 .

  • 8

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

    $ go run a.go b.go
    
  • 14

    ./main.go(在主程序包中)./a / a.go(在包a中)./ a / b.go(在包a中)

    在这种情况下:
    main.go import "./a"

    它可以调用a.go和b.go中的函数,即带有首字母大写字母 .

相关问题