Jak wskazać zależność modułu Go w go.mod do najnowszego commita w repo?

Począwszy od wersji 1.11 Go dodano obsługę modułów. Komendy

go mod init <package name>
go build

Generuje pliki go.mod i go.sum zawierające wszystkie znalezione wersje zależności pakietu.

Jeśli moduł nie posiada żadnych wydań, używany jest najnowszy commit tego modułu. Jeśli moduł ma wydania, najnowsza jest wybierana jako zależność.

Jednak czasami potrzebowałbym funkcjonalności, która nie znajduje się jeszcze w opublikowanym wydaniu, ale z commita wykonanego po tym uwolnij. Jak ustawić go.mod, aby wskazywało nie na wydanie modułu, ale na konkretny commit w repozytorium modułu?

Wygląda na to, że mogę to zrobić ręcznie.mod z
module /my/module

require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)

Gdzie v0.0.0 nie odpowiada ostatnio opublikowanemu znacznikowi release, 20181121201909 będzie znacznikiem czasu zatwierdzania, a af044c0995fe będzie skrótem zatwierdzania? Czy takie informacje należy znaleźć i wprowadzić ręcznie, czy jest lepszy sposób?

 119
Author: dimus, 2018-12-08

5 answers

Po prostu 'go get' na commit hash, który chcesz:

go get github.com/someone/some_module@af044c0995fe

'go get' poprawnie zaktualizuje pliki zależności (go.Mod, idź.suma).

Więcej informacji: https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies

 177
Author: Everton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-08 12:10:29

Dodatkowo odpowiedź od Evertona na użycie go get github.com/someone/some_module@af044c0995fe aby uzyskać konkretny commit, możesz również użyć nazw gałęzi, takich jak:

  • go get github.com/someone/some_module@master
  • go get github.com/someone/some_module@dev_branch

Te przykłady pobierają najnowszy commit w odpowiedniej gałęzi.

Nadal będzie zapisana jako pseudo-wersja w pliku go.mod, np. v0.0.0-20171006230638-a6e239ea1c69. (Pomaga to zapewnić proste całkowite zamawianie we wszystkich wersjach opartych na standardowym zamawianiu semver ).

 97
Author: typical182,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-15 20:39:35

[1]}od jakiegoś czasu waliłem w głowę, że to działa na wszystkich i nie jestem w stanie go uruchomić. Dla mnie, musiałem zobowiązać się do master branch wtedy tylko byłem w stanie go zdobyć.

Aby go dostać się do pracy z określoną gałęzią, identyfikatorem lub tagiem zmian, musisz włączyć flagę dla modułu go, uruchamiając poniżej komendę

Go env - w GO111MODULE=on

Po tym będziemy mogli zrobić

go get repo@branchname
go get repo@tag
go get repo@commithash
 8
Author: Chaitanya Gadkari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-10 12:50:34

Jeśli chcesz tymczasowo zastąpić zależność lokalnym katalogiem (na przykład, jeśli pracujesz na dwóch modułach jednocześnie), możesz dodać polecenie replace na końcu pliku go.mod:

module example.com/mypkg

go 1.15

require (
  gitlab.com/someone/a_package v0.14.2
)

replace gitlab.com/someone/a_package => ../my_forks/a_package
 4
Author: dimus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-22 14:56:15

Również, jeśli umieścisz słowo najnowsze w miejscu znacznika w go.plik mod zostanie zmieniony na najnowszy tag modułów.

Na przykład:

module /my/module

require (
...
github.com/someone/some_module latest
...
)

Stanie się

module /my/module

require (
...
github.com/someone/some_module v2.0.39
...
)

Po uruchomieniu go mod tidy

 2
Author: JFW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-09 14:56:44