我如何知道哪个版本的依赖项被拉出?

时间:2019-04-14 22:54:54

标签: go

main.go中,我有以下导入语句:

import (
    "fmt"
    "log"
    "os"
    "os/signal"
    "strings"
    "syscall"
    "github.com/bwmarrin/discordgo"
)

我遇到了一个错误,该错误应该在此依赖关系的最新版本中修复。 在构建部署的Docker容器时,如何确定插入哪个版本?

在GoLand中,它不显示任何外部依赖项:

enter image description here

这是我的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"]

3 个答案:

答案 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
)