代码之家  ›  专栏  ›  技术社区  ›  Troskyvs

golang无法导入我自己的包:第一个路径元素中缺少点

  •  0
  • Troskyvs  · 技术社区  · 5 年前

    我有一个go项目,目录结构如下

    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 我是新来的。有人能帮助我为什么会出现这个错误吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   vivek-alladi    2 年前

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

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

    导入路径

    导入路径是唯一标识包的字符串 。包的导入路径对应于它在工作区中的位置 或者在远程存储库中(如下所述)。

    标准库中的包具有较短的导入路径 例如“fmt”和“net/http”。对于您自己的套餐,您必须选择 基本路径不太可能与未来添加的路径冲突 标准库或其他外部库。

    如果你将代码保存在某个源代码存储库中,那么你应该使用该源存储库的根作为你的基本路径。For 例如,如果你在GitHub上有一个GitHub帐户,那么应该 成为你的基本路径 .

    请注意,您不需要将代码发布到远程存储库 在构建之前,组织代码只是一个好习惯 好像有一天你会发表它。在实践中,您可以选择任何 任意路径名,只要它对标准库是唯一的 更大的Go生态系统。

    例子:

    此示例假设您已设置 GOPATH=/goworkdir 在您的操作系统环境中。

    文件: 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