小编典典

Go中的相对进口

go

我有一个具有以下目录结构的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。我是新来的。谁能帮我得到这个错误的原因?


阅读 349

收藏
2020-07-02

共1个答案

小编典典

没有,Go中没有相对导入。
您应该考虑使用GOPATH来使用Abs路径:

GOPATH环境变量指定工作空间的位置。在开发Go代码时,很可能需要设置唯一的环境变量。首先,创建一个工作区目录并相应地设置GOPATH。参见:https
//golang.org/doc/code.html#GOPATH

导入路径

导入路径是唯一标识软件包的字符串 。包的导入路径与其在工作空间内或在远程存储库中的位置相对应(如下所述)。

标准库中的软件包具有简短的导入路径,例如“ fmt”和“ net /
http”。对于您自己的软件包,您必须选择一个基本路径,该基本路径不太可能与将来向标准库或其他外部库中添加的内容冲突。

如果将代码保存在某个源存储库中,则应使用该源存储库的根作为基本路径。
例如,如果您在github.com/user上有一个GitHub帐户,则应该是您的基本路径

请注意,在构建代码之前,无需将代码发布到远程存储库。这是组织代码的好习惯,就像您有一天要发布代码一样。实际上,您可以选择任意路径名,只要它是标准库和更大的Go生态系统所独有的即可。

例:

本示例假定您已GOPATH=/goworkdir在OS环境中进行设置。

文件: goworkdir/src/project1/utils/auth.go

package utils

func Test1() string {
    return "Test1"
}

文件: goworkdir/src/project1/controllers/login.go

package controllers

import "project1/utils"

func Test2() string {
    return utils.Test1()
}

文件: goworkdir/src/project1/main.go

package main

import (
    "fmt"
    "project1/controllers"
)

func main() {
    fmt.Println(controllers.Test2())
}

现在,如果您go run main.go应该看到输出:

Test1
2020-07-02