如何使用Go模块通过提交哈希或分支来提取依赖项?

如何使用Go模块通过提交哈希或分支来提取依赖项?,go,Go,我正在尝试升级我的项目,以使用Go模块进行依赖关系管理。我认识到这是一个新的/实验性的特征。我收到一个错误:找不到提供包的模块 我的go.mod当前显示: require ( github.com/bugsnag/bugsnag-go v1.5.1 github.com/bwmarrin/discordgo v0.19.0 github.com/jonas747/dshardmanager v0.0.0-20180911185241-9e4282faed43 ) 我的D

我正在尝试升级我的项目,以使用Go模块进行依赖关系管理。我认识到这是一个新的/实验性的特征。我收到一个错误:
找不到提供包的模块

我的
go.mod
当前显示:

require (
    github.com/bugsnag/bugsnag-go v1.5.1
    github.com/bwmarrin/discordgo v0.19.0
    github.com/jonas747/dshardmanager v0.0.0-20180911185241-9e4282faed43
)
我的Dockerfile:

FROM golang:1.12-alpine
RUN mkdir /app
WORKDIR /app
ADD src/ /app

ENV CGO_ENABLED=0

# Building requires git because we're pulling a dependency by commit hash
RUN apk add --no-cache --update git \
    && go build ./... \
    && apk del git

CMD ["/app/main"]
构建时,它会出现以下故障:

cannot load github.com/bugsnag/panicwrap: cannot find module providing package github.com/bugsnag/panicwrap

当我查看时,我没有看到一个
go.mod
文件。此错误是否表示此依赖项不支持模块?

您做错了,因为它可以工作。使用基于
go.mod
的应用程序不需要
go.mod

nrxr at lise in ~/code/src/github.com/nrxr/stack
$ go mod init
go: creating new go.mod: module github.com/nrxr/stack

nrxr at lise in ~/code/src/github.com/nrxr/stack
$ go get github.com/bugsnag/bugsnag-go
go: finding github.com/bugsnag/bugsnag-go v1.5.1
go: downloading github.com/bugsnag/bugsnag-go v1.5.1
go: extracting github.com/bugsnag/bugsnag-go v1.5.1
go: finding github.com/bugsnag/panicwrap v1.2.0
go: downloading github.com/bugsnag/panicwrap v1.2.0
go: finding github.com/gofrs/uuid v3.2.0+incompatible
go: downloading github.com/gofrs/uuid v3.2.0+incompatible
go: extracting github.com/bugsnag/panicwrap v1.2.0
go: extracting github.com/gofrs/uuid v3.2.0+incompatible
go: finding github.com/kardianos/osext latest
go: downloading github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
go: extracting github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0

nrxr at lise in ~/code/src/github.com/nrxr/stack
$ cat go.mod
module github.com/nrxr/stack

go 1.12

require (
        github.com/bugsnag/bugsnag-go v1.5.1 // indirect
        github.com/bugsnag/panicwrap v1.2.0 // indirect
        github.com/gofrs/uuid v3.2.0+incompatible // indirect
        github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
)

也许再试一次?尝试一下我刚才在这里使用的东西。

我不认为
go get
仍然是必要的,但依赖项是作为构建过程的一部分获取的……是的,理想情况下,您可以只
go mod init&&go build
,但我没有任何实际的代码,因此我需要一个
go get
。你的错误是找不到提供panicwrap、get go get for bugsnag的模块,go go确实解决了这个问题,所以你的设置中还有一些问题,go get修复了它。哦,实际上,你的
Dockerfile
中没有设置
GO111MODULE=on
。无论如何,
Dockerfile
中推荐的设置类似于:``COPY go.mod。复制go.sum。运行go mod下载副本../`通过这种方式,您实际上可以缓存供应商库。