我很难将本地go文件导入另一个go文件.
我的项目结构如下所示
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
Run Code Online (Sandbox Code Playgroud)
我想在b.go里面输入a.go. 我试过以下,
import "a"
import "github.com/xxxx/a"
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效.我明白我必须干涉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)
Run Code Online (Sandbox Code Playgroud)
另外,当这些源文件导入另一个项目/模块时,GOPATH如何工作?那么当地的进口是一个问题吗?在这种情况下,最佳做法是什么 - 它是否只在模块中有一个go文件(带有相关的测试)?
two*_*two 63
目录中的任意数量的文件都是单个包; 在一个文件中声明的符号可供其他人使用,不带任何imports或限定符.所有文件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
Run Code Online (Sandbox Code Playgroud)
请注意,始终使用完整github.com/...路径导入:工作空间中不允许相对导入.如果您厌倦了键入路径,请使用goimports.如果你用得到的go run,它的时间切换到go build:run与不良的交易多文件mainS和我没有刻意去试验,但听说过(来自Dave切尼这里)go run不重建脏的依赖.
听起来你至少试图将GOPATH设置为正确的东西,所以如果你仍然卡住,可能包括你如何设置环境变量(命令等)以及你运行的命令和发生了什么错误.以下是有关如何在Linux/UNIX下设置它(并使设置保持不变)的说明,这里是Go团队关于工作区设置的建议.也许两者都没有帮助,但看一看,如果你感到困惑,至少要指出哪个部分会让你困惑.
Jas*_*Kao 26
只要您声明两者a.go并且b.go在同一个包中,就不需要导入.然后,您可以使用以下go run方法识别多个文件:
$ go run a.go b.go
Run Code Online (Sandbox Code Playgroud)
小智 10
./main.go(在主
包中)
./ a/a.go(在包a中)./ a/b.go(在包a中)
在这种情况下:
main.go import"./a"
它可以调用a.go和b.go中的函数,即带有首字母大写字母.
小智 10
如果以上答案都不起作用,
你试一试,
go run .
Run Code Online (Sandbox Code Playgroud)
用于生产,
go build
Run Code Online (Sandbox Code Playgroud)
这将处理文件夹中的所有.go文件。