在main.go
中,我有以下导入语句:
import (
"fmt"
"log"
"os"
"os/signal"
"strings"
"syscall"
"github.com/bwmarrin/discordgo"
)
我遇到了一个错误,该错误应该在此依赖关系的最新版本中修复。 在构建部署的Docker容器时,如何确定插入哪个版本?
在GoLand中,它不显示任何外部依赖项:
这是我的Dockerfile:
FROM golang:1.12-alpine
RUN mkdir /app
WORKDIR /app
ADD src/ /app
ENV CGO_ENABLED=0
ENV GO111MODULE=off
# Fetch application dependencies
RUN apk add --no-cache --update git \
&& go get github.com/bwmarrin/discordgo \
&& go get github.com/jonas747/dshardmanager \
&& go get github.com/bugsnag/bugsnag-go \
&& apk del git
# Build binary
RUN go build -o main .
CMD ["/app/main"]
答案 0 :(得分:1)
有两种方法可以解决此问题。当您运行go get remote/path/to/lib
时,它将安装到$GOPATH/src/remote/path/to/lib
,因此,如果您cd
进入该路径并运行git describe --tags
,则会看到最新版本。但是,如果您使用go模块管理项目,则应该可以在依赖项名称之后的go.mod
文件中查看正在使用的版本。
因此,本质上:
go get github.com/bwmarrin/discordgo && cd $GOPATH/src/github.com/bwmarrin/discordgo && git describe --tags
应该是一种快速而又肮脏的方式,可以找到您在此特定情况下使用的版本。
答案 1 :(得分:0)
如果您想要更新程序包,请尝试使用example.com/wordpress/folder
或者可以使用诸如go get -u <package>
之类的依赖项管理。 (https://github.com/golang/dep)
您可以在dep
中指定版本。
如果您使用的Golang版本为1.11或更高版本,则为Gopkg.toml
。
答案 2 :(得分:0)
我看到您的GoLand SDK与Docker的版本不同。 如果使用1.12,则可以尝试使用go模块。它将生成一个文件go.mod,该文件将描述您的软件包和版本以及更好的管理。例如:
module github.com/example
require (
github.com/Azure/azure-storage-blob-go v0.0.0-20190104215108-45d0c5e3638e
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23
github.com/gorilla/context v1.1.1 // indirect
github.com/gorilla/mux v1.6.2
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/prometheus/client_golang v0.9.2
github.com/sirupsen/logrus v1.3.0
golang.org/x/net v0.0.0-20181220203305-927f97764cc3
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e // indirect
gopkg.in/resty.v1 v1.12.0
)