Сбой версионного импорта в go с использованием модулей

Я хочу, чтобы моя программа использовала определенную версию client-go, чтобы она была совместим с целевым кластером.

Однако следующий синтаксис:

import (
    "log"
    "os"
    "path/filepath"

    clientcmd "k8s.io/[email protected]/tools/clientcmd"
)

который я использую для построения конфигурации моего клиента следующим образом:

    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)

сбой с этим сообщением об ошибке:

▶ go run main.go
основной импорт пакета k8s.io/[email protected]/tools/clientcmd: можно использовать только синтаксис path @ version с 'go get'

Как мне указать конкретный ввод с версией?


person pkaramol    schedule 03.12.2019    source источник


Ответы (1)


Измените свой импорт на

import "k8s.io/client-go/tools/clientcmd"

И выполняем команду:

go get k8s.io/[email protected]

Используемые версии записываются в файл go.mod. Вышеупомянутый go get изменит go.mod в зависимости от данной версии. Обратите внимание, что вы также можете редактировать go.mod вручную (но лучше оставить это на ходу). Вам нужно изменить путь импорта только в том случае, если вы используете версии, начинающиеся или более поздние v2, и в этом случае основная версия должна быть суффиксом, например

import "k8s.io/client-go/tools/clientcmd/v2"

Примечание.

После указанной выше команды go get файл go.mod будет изменен и будет содержать директиву require, например:

k8s.io/client-go v0.0.0-20190708094436-77c08c6b86df // indirect

Причина этого в том, что для модулей go требуется семантическое управление версиями, а kubernetes-1.12.10 не является номером версии, совместимой с semver2. Тем не менее, инструмент go восстановит, что эта версия помечает 77c08c6b86df0af19f718d9a57620c4e9b811d48 commit и используйте его в файле go.mod.

Подробнее об этом читайте здесь: Go Wiki: Modules : Как обновить и понизить зависимости

См. Также: Блог Go: Модули Go: v2 и выше

person icza    schedule 03.12.2019