首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >go mod下载不会下载一个库;如何在不操作整个供应商缓存的情况下导入单个库

go mod下载不会下载一个库;如何在不操作整个供应商缓存的情况下导入单个库
EN

Stack Overflow用户
提问于 2020-08-25 21:41:23
回答 1查看 4.3K关注 0票数 1

(免责声明:对本说明中使用的错误词语表示歉意。我还在熟悉围棋)

我的理解是,go模块非常精巧,所以这个问题涵盖了一些与go模块和我正在下载和导入的prometheus操作符库相关的主题。

一个巨大的要求是:我无法进行大规模的go mod下载/升级,因为下游的do在我的供应商目录中升级,并且我们的代码中发生了各种各样的破坏。我在尽量避免这种情况。我只想“安装”这个库(和任何必要的辅助程序),并完成它。

所有这些都说明,使用go mod (或另一个适当的工具)获得不会更新所有供应商库的"github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"的正确方法是什么?我只需要在那里导入v1 api,以编程方式在集群中设置和读取servicemonitor

代码语言:javascript
复制
$ go mod download -x github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1
module github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1: not a known dependency

代码语言:javascript
复制
$ go get github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1
go: found github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1 in github.com/coreos/prometheus-operator v0.41.1

我的进口品

代码语言:javascript
复制
import (
    "context"
    "encoding/base64"
    "fmt"
    v1 "k8s.io/api/core/v1"
    "k8s.io/apimachinery/pkg/util/intstr"
    "strings"
    "text/template"
    "time"

    "github.com/google/uuid"

    coreosv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
    "github.com/go-kit/kit/log"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)

我使用这个库的实际代码如下所示:

代码语言:javascript
复制
    // define service monitor object
    serviceMonitorObject := &coreosv1.ServiceMonitor{
        ObjectMeta: metav1.ObjectMeta{
            Name:      objectMetaDataName,
            // TODO: fix namespace
            Namespace: "monitoring",
            Labels:    labels,
        },
        Spec: coreosv1.ServiceMonitorSpec{
            Selector: metav1.LabelSelector{
                MatchLabels: labels,
            },
            NamespaceSelector: coreosv1.NamespaceSelector{
                MatchNames: []string{
                    "monitoring",
                },
            },
            Endpoints: []coreosv1.Endpoint{
                {
                    Port: "metrics",
                    Interval: "10s",
                    HonorLabels: true,
                },
            },
        },
    }

但是,我似乎不能只导入一个库。如有任何建议或协助,将不胜感激。

错误github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1 in github.com/coreos/prometheus-operator v0.41.1表明我可能只是导入了github.com/coreos/prometheus-operator,但是当我这样做时,我的servicemonitor定义就失败了。

编辑

rm编辑了go.{mod,sum}vendor目录,并编写了git reset --hard环境,这使供应商状态恢复到了工作前的状态。我运行了以下命令,但正如您所看到的,get似乎正常工作,但是在/project/vendor/*/下不存在coreos目录。

代码语言:javascript
复制
$ go get -x github.com/coreos/prometheus-operator/
# get https://proxy.golang.org/github.com/coreos/@v/list
# get https://proxy.golang.org/github.com/@v/list
# get https://proxy.golang.org/github.com/coreos/prometheus-operator/@v/list
# get https://proxy.golang.org/github.com/@v/list: 410 Gone (0.794s)
# get https://proxy.golang.org/github.com/coreos/@v/list: 410 Gone (0.886s)
# get https://proxy.golang.org/github.com/coreos/prometheus-operator/@v/list: 200 OK (0.897s)
go: github.com/coreos/prometheus-operator upgrade => v0.41.1
$ find vendor -name '*prometheus*'
vendor/github.com/go-kit/kit/metrics/prometheus
vendor/github.com/go-kit/kit/metrics/prometheus/prometheus.go
vendor/github.com/prometheus
vendor/github.com/prometheus/client_golang/prometheus

重新设置我的环境。执行了以下工作:

代码语言:javascript
复制
$ go mod download -x github.com/coreos/prometheus-operator/...
warning: pattern "github.com/coreos/prometheus-operator/..." matched no module dependencies
$ go mod download -x github.com/coreos/prometheus-operator/
module github.com/coreos/prometheus-operator/: not a known dependency

根据文档,下面应该显示所有使用的mods (添加grep core以获得更简短的输出):

代码语言:javascript
复制
$ go list -m all | grep core
github.com/coreos/bbolt v1.3.2
github.com/coreos/etcd v3.3.10+incompatible
github.com/coreos/go-etcd v2.0.0+incompatible
github.com/coreos/go-oidc v2.2.1+incompatible
github.com/coreos/go-semver v0.3.0
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f
github.com/coreos/prometheus-operator v0.41.1

然而,我仍然无法编译:

代码语言:javascript
复制
$ make -f build/Makefile generators ims-bin-darwin && ./ims-api --config_file=/var/tmp/jim-ims-api.yaml --kubeconfig $HOME/.kube/config --populate_demo_db=true --populate_demo_file hack/demo1.yaml --debug_logging --db_debug_logging
./build/generators/api.sh
Ensuring Bin Directory (./build/generators/../../bin) Exists...
Ensuring Destination Directory ( pkg/generated/api ) Exists...
Ensuring Destination Directory ( pkg/generated/kaas-api ) Exists...
Ensuring Swagger Asset Directory ( assets/generated/swagger ) Exists...
go: inconsistent vendoring in /Users/jimconn/projects/src/ims-api:
        github.com/go-kit/kit@v0.10.0: is explicitly required in go.mod, but vendor/modules.txt indicates github.com/go-kit/kit@v0.9.0
        github.com/golang/protobuf@v1.4.1: is explicitly required in go.mod, but vendor/modules.txt indicates github.com/golang/protobuf@v1.3.2
        github.com/grpc-ecosystem/grpc-gateway@v1.14.6: is explicitly required in go.mod, but vendor/modules.txt indicates github.com/grpc-ecosystem/grpc-gateway@v1.9.6
        github.com/pkg/errors@v0.9.1: is explicitly required in go.mod, but vendor/modules.txt indicates github.com/pkg/errors@v0.8.1
        github.com/prometheus/client_golang@v1.6.0: is explicitly required in go.mod, but vendor/modules.txt indicates github.com/prometheus/client_golang@v1.1.0
        golang.org/x/time@v0.0.0-20200416051211-89c76fbcd5d1: is explicitly required in go.mod, but vendor/modules.txt indicates golang.org/x/time@v0.0.0-20190308202827-9d24e82272b4
        google.golang.org/genproto@v0.0.0-20200603110839-e855014d5736: is explicitly required in go.mod, but vendor/modules.txt indicates google.golang.org/genproto@v0.0.0-20190817000702-55e96fffbd48
        google.golang.org/grpc@v1.29.1: is explicitly required in go.mod, but vendor/modules.txt indicates google.golang.org/grpc@v1.23.1
        gopkg.in/yaml.v2@v2.3.0: is explicitly required in go.mod, but vendor/modules.txt indicates gopkg.in/yaml.v2@v2.2.8
        k8s.io/api@v0.18.3: is explicitly required in go.mod, but vendor/modules.txt indicates k8s.io/api@v0.17.2
        k8s.io/apimachinery@v0.18.3: is explicitly required in go.mod, but vendor/modules.txt indicates k8s.io/apimachinery@v0.17.2
        k8s.io/client-go@v0.18.3: is explicitly required in go.mod, but vendor/modules.txt indicates k8s.io/client-go@v0.17.2

run 'go mod vendor' to sync, or use -mod=mod or -mod=readonly to ignore the vendor directory
make: *** [generators] Error 1

我运行了go mod vendor,回到了我的整个供应商树被更改的状态:

代码语言:javascript
复制
$ g st
On branch expose-bm-prom
Your branch is up to date with 'origin/expose-bm-prom'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   assets/generated/swagger/api.swagger.json
        modified:   go.mod
        modified:   go.sum
        modified:   pkg/generated/api/api.pb.go
        modified:   pkg/generated/api/api.pb.gw.go
...
        modified:   vendor/sigs.k8s.io/yaml/README.md
        modified:   vendor/sigs.k8s.io/yaml/yaml.go

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        vendor/github.com/cespare/
        vendor/github.com/coreos/
        vendor/github.com/golang/protobuf/internal/
        vendor/github.com/golang/protobuf/jsonpb/decode.go
        vendor/github.com/golang/protobuf/jsonpb/encode.go
...
        vendor/k8s.io/client-go/util/workqueue/
        vendor/sigs.k8s.io/structured-merge-diff/
        vendor/sigs.k8s.io/yaml/go.mod
        vendor/sigs.k8s.io/yaml/go.sum

no changes added to commit (use "git add" and/or "git commit -a")
代码语言:javascript
复制
$ g st | grep -c vendor
942    # files changed

这就是世界的现状吗?如果不处理对整个供应商树的大量更改,我就无法导入这个库吗?这完全破坏了我的代码!这太荒谬了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-24 21:33:48

go get -d github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1是添加依赖于提供该包的模块的最新版本的正确方法。

go get添加模块依赖项时,它会根据需要对其他依赖项进行升级,以满足新模块的需求。这可能就是为什么您在运行go mod vendor时看到了大量的更改。

如果您希望最小化这些更改,您可能需要显式地选择一个旧版本(这样它就会有较旧的需求):

代码语言:javascript
复制
go get -d github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1@$OLD_VERSION
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63587509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档