Откуда `go build` получает свой код? - PullRequest
0 голосов
/ 03 февраля 2020

Итак, у меня есть проект, для которого я хочу использовать кусочки кода CLI Docker. Он использует модули. Docker CLI этого не делает.

Странно то, что в какой-то момент у меня это работало, но мне пришлось переключать ветки, и теперь я не могу заставить его строить снова.

Мой go .mod выглядит следующим образом:

go 1.13

require (
    github.com/docker/cli v0.0.0-20200129215115-2079e743c493
    github.com/docker/docker v1.13.1 // indirect
    github.com/docker/go-connections v0.4.0 // indirect
    github.com/docker/go-units v0.4.0 // indirect
    github.com/imdario/mergo v0.3.8 // indirect
    github.com/mattn/go-shellwords v1.0.9 // indirect
    github.com/pelletier/go-toml v1.6.0 // indirect
    github.com/sirupsen/logrus v1.4.2
    github.com/spf13/afero v1.2.2 // indirect
    github.com/spf13/cast v1.3.1 // indirect
    github.com/spf13/cobra v0.0.5
    github.com/spf13/jwalterweatherman v1.1.0 // indirect
    github.com/spf13/pflag v1.0.5 // indirect
    github.com/spf13/viper v1.6.1
    github.com/xeipuuv/gojsonschema v1.2.0 // indirect
    golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
    golang.org/x/text v0.3.2 // indirect
    gopkg.in/ini.v1 v1.51.1 // indirect
    gopkg.in/yaml.v2 v2.2.7
    gotest.tools v2.2.0+incompatible // indirect
)

Я пытался удалить каталог вендора, я пытался удалить $ (go env GOCACHE), я даже пытался удалить каталог pkg / mod. Я пробовал строить с и без -mod = vendor. Я даже пытался собрать с использованием Dockerfile, с --no-cache и без него.

Каждый раз результат один и тот же:

github.com / docker / cli / opts / config . go: 15: 12: undefined: swarm.ConfigReference

Но, и это меня поражает, это не то, что говорится в любой версии opts / config. go on line 15. Там написано swarmtypes вместо swarm, что правильно. Поиск значения swarm.ConfigReference в каталоге проекта не дает результатов. Я также попытался сгладить вывод строки go build для конфигурации. go, никаких результатов, кроме этой ошибки. Редактировать: фактически strace усекал путь, go build фактически открывает файл. Но я проверяю строку 15 в файле по абсолютному пути, показанному для открытия, и он говорит swarmtypes, а не swarm.

Откуда go build получает этот код?

Редактировать: исправлено, я гонялся за призраками, так как go build сообщал о реальном типе вместо псевдонима импорта. Спасибо Питеру ниже.

Для справки, это фактически сборка (обратите внимание, что она использует никогда версию docker / docker):

require (
    github.com/containerd/containerd v1.3.2 // indirect
    github.com/docker/cli v0.0.0-20200130152716-5d0cf8839492
    github.com/docker/distribution v2.7.1+incompatible // indirect
    github.com/docker/docker v1.4.2-0.20200201180422-513b207b002d // indirect
    github.com/docker/go-connections v0.4.0 // indirect
    github.com/docker/go-units v0.4.0 // indirect
    github.com/imdario/mergo v0.3.8 // indirect
    github.com/mattn/go-shellwords v1.0.9 // indirect
    github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
    github.com/opencontainers/image-spec v1.0.1 // indirect
    github.com/pelletier/go-toml v1.6.0 // indirect
    github.com/sirupsen/logrus v1.4.2
    github.com/spf13/afero v1.2.2 // indirect
    github.com/spf13/cast v1.3.1 // indirect
    github.com/spf13/cobra v0.0.5
    github.com/spf13/jwalterweatherman v1.1.0 // indirect
    github.com/spf13/pflag v1.0.5 // indirect
    github.com/spf13/viper v1.6.1
    github.com/xeipuuv/gojsonschema v1.2.0 // indirect
    golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect
    golang.org/x/text v0.3.2 // indirect
    gopkg.in/ini.v1 v1.51.1 // indirect
    gopkg.in/yaml.v2 v2.2.7
    gotest.tools v2.2.0+incompatible // indirect
)
...