转到模块:“找不到提供包的模块”依赖项的导入子包

时间:2019-08-08 03:54:15

标签: go go-modules

我在$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

1 个答案:

答案 0 :(得分:1)

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

具有有效的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

通常,模块的名称(也称为“模块路径”)应以github.com之类的主机名开头,并且通常以回购协议开头,例如:

go mod init github.com/my/repo

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

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

使用您的示例,它将是:

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

导入为:

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

如果模块路径与导入路径不一致,则可能会得到与您看到的类似的错误。 (您的“模块路径”是您作为go mod init的参数传递的,然后您可以在module文件的go.mod行上看到它。)

有关更多背景信息和更多详细信息,请参见this answer

相关问题