【问题标题】:Using modules, newly installed package cannot be referenced within project使用模块,新安装的包不能在项目中引用
【发布时间】:2019-06-04 19:29:00
【问题描述】:

go 版本 go1.11.4 darwin/amd64 GOPATH 未设置,但之前设置为 $HOME/Development/go

项目路径在$HOME/code/下

我能够使用命令成功(至少没有错误)安装 go-sql-driver/mysql 包

go get github.com/go-sql-driver/mysql@v1

当我在导入语句中包含对该包的引用时

import(
_ "github.com/go-sql-driver/mysql")

在我的代码中我看到了错误

无法导入 github.com/go-sql-driver/mysql(找不到导入: “github.com/go-sql-driver/mysql”)

我在我的项目根目录中运行了 go mod init 并创建了一个 go.mod 文件。当我运行 go get 命令时,我看到一个 require 语句添加到该包的文件中。但似乎该软件包的文件已安装在默认的 $HOME/go 目录中(因为我已取消设置 GOPATH)。

我应该做不同的事情,以便我的导入语句可以找到新安装的包吗?使用模块不应该把所有的包都安装在项目路径的某个地方吗?

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    我应该做一些不同的事情,以便我的导入语句可以找到新安装的包吗?

    没有。有了模块,根本不需要预先安装包。

    使用模块不应该把所有的包都安装在项目路径的某处吗?

    没有。它们以某种格式下载到某处并从该位置使用,但它们不像 go get 的旧 GOPATH 变体那样“安装”。

    显示 go env 的输出以及 go mod 供应商生产的内容。

    【讨论】:

    • 他们会进入 $gopath/pkg 吗?
    • @kendfss。不,他们去$GOMODCACHE。没有魔法,只要阅读pkg.go.dev/cmd/go 它很长,但组织良好且可搜索。
    【解决方案2】:

    我很确定我做错了。在仔细参考golang modules wiki 记录的以下步骤后,我能够解决此问题。总结是不需要通过“go get”“安装”一个包。相反,只需确保您的项目已使用“go mod init”命令初始化为使用模块,然后在导入语句中包含包名称。下一个构建事件将拉下包及其所有依赖项。

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多