我有一个具有以下目录结构的go Project
utils(pkg) | auth.go (has a function names test1) controllers(pkg) | login.go (has a function names test2)
我正在尝试从login.go访问功能test1。这是我所做的
import "../utils" func test2(c *gin.Context) bool{ utils.test1() }
但是我总能得到Unresolved reference test1。我是新来的。谁能帮我得到这个错误的原因?
Unresolved reference test1
没有,Go中没有相对导入。 您应该考虑使用GOPATH来使用Abs路径:
导入路径 导入路径是唯一标识软件包的字符串 。包的导入路径与其在工作空间内或在远程存储库中的位置相对应(如下所述)。 标准库中的软件包具有简短的导入路径,例如“ fmt”和“ net / http”。对于您自己的软件包,您必须选择一个基本路径,该基本路径不太可能与将来向标准库或其他外部库中添加的内容冲突。 如果将代码保存在某个源存储库中,则应使用该源存储库的根作为基本路径。 例如,如果您在github.com/user上有一个GitHub帐户,则应该是您的基本路径。 请注意,在构建代码之前,无需将代码发布到远程存储库。这是组织代码的好习惯,就像您有一天要发布代码一样。实际上,您可以选择任意路径名,只要它是标准库和更大的Go生态系统所独有的即可。
导入路径是唯一标识软件包的字符串 。包的导入路径与其在工作空间内或在远程存储库中的位置相对应(如下所述)。
标准库中的软件包具有简短的导入路径,例如“ fmt”和“ net / http”。对于您自己的软件包,您必须选择一个基本路径,该基本路径不太可能与将来向标准库或其他外部库中添加的内容冲突。
如果将代码保存在某个源存储库中,则应使用该源存储库的根作为基本路径。 例如,如果您在github.com/user上有一个GitHub帐户,则应该是您的基本路径。
请注意,在构建代码之前,无需将代码发布到远程存储库。这是组织代码的好习惯,就像您有一天要发布代码一样。实际上,您可以选择任意路径名,只要它是标准库和更大的Go生态系统所独有的即可。
例:
本示例假定您已GOPATH=/goworkdir在OS环境中进行设置。
GOPATH=/goworkdir
文件: goworkdir/src/project1/utils/auth.go
goworkdir/src/project1/utils/auth.go
package utils func Test1() string { return "Test1" }
文件: goworkdir/src/project1/controllers/login.go
goworkdir/src/project1/controllers/login.go
package controllers import "project1/utils" func Test2() string { return utils.Test1() }
文件: goworkdir/src/project1/main.go
goworkdir/src/project1/main.go
package main import ( "fmt" "project1/controllers" ) func main() { fmt.Println(controllers.Test2()) }
现在,如果您go run main.go应该看到输出:
go run main.go
Test1