Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Go modules Ринат Байгильдин, Go разработчик

Slide 3

Slide 3 text

public announce Немного истории 3 2009

Slide 4

Slide 4 text

Немного истории 4 2009 public announce 2012 release Go 1.0

Slide 5

Slide 5 text

Немного истории 5 2009 public announce 2012 release Go 1.0 2015 vendor

Slide 6

Slide 6 text

Немного истории 6 2009 public announce 2012 release Go 1.0 2015 vendor dep “official experiment” 2017

Slide 7

Slide 7 text

Немного истории 7 2009 public announce 2012 release Go 1.0 2015 vendor dep “official experiment” 2017 2018 vgo

Slide 8

Slide 8 text

Немного истории 8 2009 public announce 2012 release Go 1.0 2015 vendor dep “official experiment” 2017 2018 vgo NOW modules

Slide 9

Slide 9 text

$ go get 9 P

Slide 10

Slide 10 text

$ go get 10 P D 1.0 go get D

Slide 11

Slide 11 text

$ go get 11 P D 1.0 C 1.8 go get C

Slide 12

Slide 12 text

$ go get 12 P D 1.0 C 1.8 go get C

Slide 13

Slide 13 text

$ go get 13 P D 1.0 D 1.4 C 1.8 go get C

Slide 14

Slide 14 text

$ go get 14 P D 1.0 D 1.4 C 1.8 go get C broken!

Slide 15

Slide 15 text

$ go get 15 P D 1.0 D 1.4 D 1.6 C 1.8 go get -u C

Slide 16

Slide 16 text

$ go get 16 P D 1.0 D 1.4 D 1.6 C 1.8 go get -u C broken!

Slide 17

Slide 17 text

Инструменты управления зависимостями 17 gb gsv trash manul Vendetta gv govend vexp gvt godm gom Govendor Rubigo Godep dep Glide

Slide 18

Slide 18 text

Demo

Slide 19

Slide 19 text

Модуль 19 l Модуль - это набор пакетов, которые версионируются вместе, как единое целое. Отношения между репозиториями, модулями и пакетами: › Репозиторий содержит один или несколько Go модулей. › Каждый модуль содержит один или несколько Go пакетов. › Каждый пакет содержит один или несколько Go файлов в одной директории.

Slide 20

Slide 20 text

Семантическое версионирование 20

Slide 21

Slide 21 text

Russ Cox ▎Если старый и новый пакеты имеют одинаковый путь, новый пакет должен быть обратно совместим со старым

Slide 22

Slide 22 text

Выбор минимальной версии 22

Slide 23

Slide 23 text

Принципы 23 l Воспроизводимость сборки При повторении сборка должна давать одинаковый результат.

Slide 24

Slide 24 text

Принципы 24 l Воспроизводимость сборки При повторении сборка должна давать одинаковый результат. l Проверяемость сборки Для повторения сборки должно быть достаточно информации.

Slide 25

Slide 25 text

Принципы 25 l Воспроизводимость сборки При повторении сборка должна давать одинаковый результат. l Проверяемость сборки Для повторения сборки должно быть достаточно информации. l Проверенная сборка Использование ожидаемого исходного кода во время сборки.

Slide 26

Slide 26 text

Demo

Slide 27

Slide 27 text

27 go.mod module example.com/foo/bar go 1.12 require rsc.io/quote v1.5.2 replace rsc.io/quote => github.com/brr/mod v1.0.1 replace rsc.io/quote => ../path exclude "old/thing" v1.2.3

Slide 28

Slide 28 text

28 GOPROXY l GOPROXY позволяет хранить копии модулей для быстрой доставки $ export GOPROXY=https://1.5.12.10/proxy

Slide 29

Slide 29 text

Выводы 29 › Модули – часть языка Go (с версии 1.12) › Простая миграция (dep, glide, govendor, godep) › Отказ от vendor в пользу GOPROXY › Нет привязки к $GOPATH

Slide 30

Slide 30 text

Полезные ссылки 30 › Дизайн: https://research.swtch.com/vgo › Тур по версионированию: https://research.swtch.com/vgo-tour › Материалы: https://golang.org/wiki/vgo

Slide 31

Slide 31 text

Ринат Байгильдин Go разработчик Спасибо! bayrinat@yandex-team.ru @bayrinat