【问题标题】:Import local package from main in Go从 Go 中的 main 导入本地包
【发布时间】:2014-05-11 15:38:21
【问题描述】:

我正在使用 Go 及其 net/http stdlib 模块编写 API,并且我在名为 utils 的目录中有一些 utils 代码。但是当我在 main 中导入它们时,Go 找不到包。根本原因显然是 Go 包必须保存在 $GOPATH/src/ 中。所以我想知道是否有办法导入本地包并将它们保存在与主包相同的文件夹中。

我正在关注 Github 目录结构,所以我的 $GOPATH 看起来像这样。

$GOPATH/src/
   |___github.com/
       |___user/
           |___repository/
               |___main.go
               |___utils/
                   |___core.go
                   |___factory.go

由于 utils 目录确实与应用程序相关联,因此将其另存为 $GOPATH/src 中的其他 Go 应用程序对我来说真的很糟糕。除此之外,想象一下我想在 Github 上推送我的代码的那一刻。这里只有 2 个存储库,但如果是 6 个,我将需要 6 个私有存储库,用于单个应用程序的真正相关和绑定部分。

【问题讨论】:

  • 你是怎么导入的?
  • import "github.com/user/repository/utils/core"。当我指定包(这里是核心)时,Go 找不到它。当我停止使用 utils 时,它说有 2 个包(核心和工厂)
  • 因为每个包应该有一个目录
  • @phndiaye 两个文件上的package 声明应为package utils,并且应使用import "github.com/user/repository/utils" 导入
  • 哦,我明白了!这就是问题所在。我将 core 和 factory 都声明为 utils 包成员,它可以工作。

标签: go


【解决方案1】:

(记录一个乍一看似乎没有答案的答案)

两个文件上的package 声明应为package utils,并且应使用以下命令导入:

import "github.com/user/repository/utils"

如果您真的想将每个代码文件分离为单独的包,也可以制作子包(标准库io 包有io/ioutil)。

import "github.com/user/repository/utils"
import "github.com/user/repository/utils/sub"

本地目录结构为:

$GOPATH/src/
   |___github.com/
       |___user/
           |___repository/
               |___main.go
               |___utils/
                   |___core.go
                   |___sub/factory.go

(@phndiaye 在评论中发布的答案详细信息)

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多