go .mod ошибка сборки с устаревшим пакетом - PullRequest
0 голосов
/ 21 апреля 2020

tl; dr;

Преобразование сборки большого проекта из GOPATH в go modules - так что я могу жестко принудительно управлять версиями пакетов. Это преобразование выполнено на 95%, но он столкнулся с неприятным крайним случаем унаследованного стороннего пакета, который кажется несовместимым со сборками типа go modules.


Проблему сборки можно легко воспроизвести с помощью этого фрагмента :

package iamstuck

import _ "github.com/vjeantet/goldap/message" // <- 5+ years old i.e. pre-go-modules

Построение этого приводит к следующей ошибке:

$ go mod init iamstuck
$ go build; echo RC=$?

go: finding module for package github.com/vjeantet/goldap/message
iamstuck.go:3:8: no matching versions for query "latest"
RC=1

Попытка вручную извлечь последнюю версию фиксации, также завершается неудачей:

$ go get github.com/vjeantet/goldap/message

go get github.com/vjeantet/goldap/message: no matching versions for query "upgrade"

Выше компилируется при использовании директивы GOPATH или non-go -modules:

$ GO111MODULE=off go build ; echo RC=$?

RC=0

При некоторых поисках в Google обнаруживается go проблема 28001 : с причиной root, предположительно являющейся недопустимый символ : в некоторых пакетах do c имена файлов - поэтому ничего общего с файлами пакета go -кода!

Так что мой вопрос: можно ли перемещаться вокруг этой go modules проблемы сборки без изменения стороннего пакета? может быть, какая-то специальная директива go.mod?


Я бы не хотел раскошелиться на этот репо. Я также использую родительский пакет github.com / vjeantet / ldapserver , который импортирует / ссылается на проблему c github.com/vjeantet/goldap/message. Таким образом, этот пакет необходимо будет также разветвлять / обновлять. Так что это становится очень грязным ...

Поскольку этот проект и зависимости компилируются с использованием GOPATH - я чувствую, что должна быть какая-то директива, которую я могу использовать в go.mod, чтобы обойти эту проблему?

...