Использование глагола замены в модулях go для labix.org mgo - PullRequest
0 голосов
/ 16 ноября 2018

Используя модули go, я бы хотел заменить labix.org/v2/mgo на github.com/globalsign/mgo.Репозиторий http://labix.org/mgo не поддерживается и был разветвлен на https://github.com/globalsign/mgo

  • мой код хранится вне $GOPATH в каталоге ~/git/foo
  • I'mс помощью go1.11
  • работают другие модули go (например, go list -m all перечисляет другие модули, файлы go.mod и go.sum обновляются автоматически. См. полный файл ниже)

В файле go.mod я пробовал следующее:

replace labix.org/v2/mgo => github.com/globalsign/mgo v0.0.0-20181015145952-eeefdecb41b842af6dc652aaea4026e8403e62df

Запуск go build выдает следующую ошибку:

build github.com/foo/bar: cannot find module for path labix.org/v2/mgo

В документации по go help modules обсуждается Псевдоверсии например v0.0.0-yyy.., которые я пытаюсь использовать, потому что теги https://github.com/globalsign/mgo имеют форму r2018.06.15, а не v1.2.3 (семантическое управление версиями).

Кроме того go help modules говорит:

Pseudo-versions never need to be typed by hand: the go command will accept
the plain commit hash and translate it into a pseudo-version (or a tagged
version if available) automatically. This conversion is an example of a
module query.

Однако я не могу обработать команду для генерации псевдо-версии, когда я нахожусь в клонированном github.com/globalsign/mgo (расположенном в $GOPATH/src/github.com/globalsign/mgo).Следовательно, псевдо-версия, которую я сгенерировал вручную, может быть неправильной.

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

module github.com/foo/bar                                                                                                                                     

replace labix.org/v2/mgo => github.com/globalsign/mgo v0.0.0-20181015145952-eeefdecb41b842af6dc652aaea4026e8403e62df                                                                          

require (                                                                                                                                                                                     
  github.com/DATA-DOG/godog v0.7.8                                                                                                                                                            
  github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 // indirect                                                                                                                 
  github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 // indirect                                                                                                                 
  github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 // indirect
  ...                                                                                                                   
)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Заменяемый источник (в данном случае labix.org/v2/mgo) также необходимо добавить в список требований с версией v0.0.0 (даже если он не будет загружен). В замене source не требуется версия, но target не требуется.

Однако я не знал, как автоматически сгенерировать псевдо-версию для target (в данном случае github.com/globalsign/mgo), поэтому мне все еще нужно было сгенерировать ее вручную.

Вот лучший файл go.mod:

  1 module foo.bar/qux                        
  2                                                                                  
  3 replace labix.org/v2/mgo => github.com/globalsign/mgo v0.0.0-20181015145952-eeefdecb41b842af6dc652aaea4026e8403e62df
  4                                                                                  
  5 require (                                                                        
  6   github.com/DATA-DOG/godog v0.7.8                                               
  7   github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 // indirect    
      <snip>                 
 21   golang.org/x/image v0.0.0-20181116024801-cd38e8056d9b // indirect              
 22   labix.org/v2/mgo v0.0.0                                                        
 23 )

Обратите внимание на требование labix.org в строке 22; go mod tidy принимает это.

Однако теперь я сталкиваюсь с другой проблемой - использованием внутренних пакетов (упоминаемых в таких вопросах: https://github.com/golang/go/issues/23970). Я до сих пор не решил эту новую проблему.

% go build main.go
/home/sonia/go/pkg/mod/github.com/globalsign/mgo@v0.0.0-20181015145952-eeefdecb41b842af6dc652aaea4026e8403e62df/auth.go:38:2:
use of internal package github.com/globalsign/mgo/internal/scram not allowed
0 голосов
/ 16 ноября 2018

При использовании директивы replace не указывайте псевдо-версию. Здесь также указано , что указывает на открытый выпуск.

Возможно, не по теме, но я в основном использовал replace, когда хотел использовать локальную версию некоторой зависимости. Почему бы не import разветвленная библиотека, которую вы хотели бы использовать (вместо оригинальной необслуживаемой) и чтобы мод разрешил ее правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...