Go 模块:"cannot find module providing package" 正在导入依赖项的子包

Go modules: "cannot find module providing package" importing sub package of a dependency

我在 $GOPATH 之外有一个项目,我想使用 go mod。 但是,当我从 $GOPATH 和 运行

中的项目复制代码时
$ GO111MODULE=on go mod init github.com/jgoc/modtest
$ GO111MODULE=on go run main.go

我收到一个错误。

go version go1.12.5 windows/amd64

package main

import (
    "github.com/hajimehoshi/ebiten"
    "github.com/hajimehoshi/ebiten/vector"
)

build command-line-arguments: cannot load github.com/hajimehoshi/ebiten/vector: cannot find module providing package github.com/hajimehoshi/ebiten/vector

示例:https://github.com/jgoc/modtest

根据最近提供实际包名称的编辑,听起来您需要使用具有 vector 包的 github.com/hajimehoshi/ebiten 依赖项版本。

具有有效 semver 发布标记的 github.com/hajimehoshi/ebiten 的最新版本是 https://github.com/hajimehoshi/ebiten/tree/v1.9.3。该版本似乎没有 vector 包。

@master 版本有一个 vector 包。 @v1.10.0-alpha 没有 vector 包。也许从 @master 开始,至少看看你能不能编译?

这对我有用:

go get -d github.com/hajimehoshi/ebiten/vector@master

有关详细信息,请阅读模块 wiki 的 How to Upgrade and Downgrade Dependencies 部分。


此外,您的模块的实际名称是什么?您用来导入该模块中代码的实际导入路径是什么?

您写道:

go mod init Desktop/modtest

通常,模块的名称(也称为 "module path")应以主机名开头,例如 github.com,最常见的是 repo,例如:

go mod init github.com/my/repo.

然后您使用以您传递给 go mod init 的完整模块路径开头的导入路径在 .go 代码中导入包,例如:

import "github.com/my/repo/pkg1".

使用您的示例,它将是:

go mod init github.com/<author>/<package>

进口将是:

import (
    "github.com/<author>/<package>"
    "github.com/<author>/<package>/<sub-package>"
)

如果您的模块路径与您的导入路径不一致,您可能会收到类似于您所看到的错误。 (您的 "module path" 是您作为参数传递给 go mod init 的内容,然后您可以在 go.mod 文件的 module 行中看到它。

请参阅 了解更多上下文和更多详细信息。