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

Import 导入同一文件夹中的go文件,import,path,go,Import,Path,Go,我在将本地go文件导入另一个go文件时遇到困难 我的项目结构如下所示 -samplego --pkg --src ---github.com ----xxxx -----a.go -----b.go --bin 我想把a.go导入b.go。我试了以下方法 import "a" import "github.com/xxxx/a" 这些都不管用。我知道我必须插手GOPATH,但我做不好。目前我的GOPATH指向samplego(/workspace/samplego) cannot find

我在将本地go文件导入另一个go文件时遇到困难

我的项目结构如下所示

-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
我想把a.go导入b.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文件(以及相关测试)

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

您确实需要将
GOPATH
设置为
pkg
src
bin
目录所在的目录。这只是一个偏好问题,但通常所有应用都有一个单一的工作区(有时
$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-build
run
处理多个文件
main
的能力很差,我没有费心测试,但(从Dave Cheney那里)听说
go-run
不会重建脏的依赖项

听起来您至少已经尝试将GOPATH设置为正确的设置,因此,如果您仍然被卡住,可能需要准确地包括您如何设置环境变量(命令等)、您运行了什么命令以及发生了什么错误。和。也许两者都没有帮助,但看看,如果你感到困惑,至少指出哪一部分让你困惑

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

在这种情况下:
main.go导入“/a”


它可以调用a.go和b.go中的函数,即第一个字母大写。

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

$ go run a.go b.go

我只是想要一些非常基本的东西来将一些文件移出主文件夹,比如user2889485的回复,但他的具体回答对我来说并不适用。我不在乎他们是否在同一个包裹里

我的GOPATH工作区是
c:\work\go
,在它下面我有

/src/pg/main.go      (package main)
/src/pg/dbtypes.go   (pakage dbtypes)

main.go
I
import”/pg/dbtypes“

正如前面提到的,不需要使用任何导入。 很多人提到,当你提到大多数文件时,使用go run是可能的,但是当在同一目录中有多个.go文件时,可能会很麻烦。
因此,我通常使用
go run*.go

目录中的任意数量的文件从一开始就是同一个包的一部分。(他们需要在顶部有相同的
包a
声明。)谢谢@twootwo…你能告诉我如何解决上述问题吗?此外,当我们在一个包中有多个go文件时,如果导入遵循完整路径,例如github.com/xxxx/a或只是一个Dogo模块,则相同目录中的文件仍然是同一个包的一部分,仍然需要具有相同的包名(例如,
包foo
),并且仍然不需要直接彼此导入。对于Go模块,本文将详细介绍这一点,包括如何在Go模块下导入同一模块中的包。goimports非常有用:)如果在主包中运行多个文件时遇到问题,请参阅。我向同一目录中的所有文件添加了相同的
package main
声明,但是我有一个
未定义的
错误,
main.go
无法查看同一目录下的文件
控制器.go
中的函数。@AlexChaliy如果您使用的是
go run
,您可能需要显式地将这两个文件名传递给它,或者切换到将它们放在GOPATH中的包中,然后
go build
。还要仔细检查与包结构无关的常见错误(如键入的名称)。如果这些都不能解决问题,我会尽可能详细地提出一个新问题;它可能需要大量的讨论来精确地解决您的目录、文件等的外观问题,而且由于它是专门关于您的设置的,所以一个新的问题似乎是解决这个问题的最佳场所。