Модули и зависимости Go с измененными поставщиками

Я пытаюсь преобразовать один проект Go в новый стандарт модулей, но у меня возникают проблемы с одной зависимостью.

Этот репозиторий предоставил библиотеку (в данном случае golang.org/x/net/html), чтобы добавить в библиотеку некоторые функции; это означает, что он изменил зависимость от поставщика (добавил метод в структуру).

Итак, проблема в том, что после выполнения go mod init, когда я выполняю go get ./..., система жалуется на вызов этой добавленной функциональности, потому что она игнорирует измененного поставщика и вместо этого пытается импортировать вышестоящую библиотеку.

Есть ли способ сообщить go mod, что он должен использовать вендорную зависимость?


person AntonioHS    schedule 06.04.2019    source источник


Ответы (2)


Вы можете попробовать replace директива. Что-то в духе

Первый

cd ./vendor/golang.org/x/net/html
go mod init

Затем в вашем корне go.mod

module your/super/module

replace golang.org/x/net/html => ./vendor/golang.org/x/net/html

require golang.org/x/net/html v0.0.0

Обратите внимание, что необходимы как require, так и replace.

person peterm    schedule 07.04.2019
comment
Поскольку проблема в том, что папка поставщика находится в одной из моих зависимостей, мой модуль зависит от репозитория, в котором есть поставщик. Итак, что мне пришлось сделать, следуя вашему совету, это клонировать зависимость в другое место на моем жестком диске, перейти в папку vendor/golang.org/x/ne/htmlt и выполнить go mod init. Тогда раздел replace в корне go.mod был replace golang.org/x/net/html => ../../path/elsewhere/vendor/golang.org/x/net/html И теперь работает. Спасибо! - person AntonioHS; 07.04.2019

После go1.15 вы можете строить с -mod=readonly, чтобы избежать импорта только из каталога поставщика.

пример:

go build -mod=readonly -o ./build/project -ldflags "-s -w" main.go

person Xiao Qian    schedule 27.11.2020