【问题标题】:How to make a short/relative import如何进行短/相对导入
【发布时间】:2020-12-29 22:23:58
【问题描述】:

是否可以在 Go 代码中进行相对导入?我读了很多例子,但我真的不明白如何做到这一点。比如我有一个项目app,里面有一个子包utils

app
   main.go
   utils
        utils.go

utils.go:

package utils

import "fmt"

func TestFunc()  {
    fmt.Print("I'm a TestFunc")
}

有没有办法只使用import "./utils"import "app/utils 导入此包,但不采用import "github.com/hithubuser/app/utils" 之类的所有路径?

如果没有办法做到这一点,你如何处理嵌套包?您是为所有导入编写完整路径还是避免编写?

【问题讨论】:

    标签: go import


    【解决方案1】:

    通常导入路径在$GOPATH/src之后开始,参考doc

    假设你有目录结构:

    $GOPATH/src/github.com/hithubuser/app/utils
    
    # your import path is 'github.com/hithubuser/app/utils'
    

    您是为所有导入编写完整路径还是避免编写?

    是的,通常使用完全导入,因为它使您能够将代码分发为 go 库。这样您就可以开发可重用的代码并根据需要将其导入任何项目中,也可以将其发布到 Go 社区。​​p>


    假设您有独立的项目,没有引用任何其他 Go 项目,并且您以二进制而不是 go 库的形式分发。然后你可以这样做(虽然它不常用/不推荐)。

    只需在$GOPATH/srcgit clone github.com/hithubuser/app 一样 git 克隆你的仓库

    $GOPATH/src/app/utils
    
    # then import path is app/utils
    

    【讨论】:

      【解决方案2】:

      另一种可能性是使用 Go 1.5 中引入的供应商工具。

      1. 创建一个vendor 目录。
      2. 复制(或git clone 或其他)您的utils 目录作为vendor 的子目录,因此您的层次结构现在如下所示:

        app
        |-- main.go
        `-- vendor/
            `-- utils/
                `-- utils.go
        
      3. Set the GO15VENDOREXPERIMENT environment variable to 1 在使用 Go 1.5 时启用供应商支持。较新的版本默认启用它。

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        相关资源
        最近更新 更多