Go Modules in Go1.12

Go Modules in Go1.12

Go 1.12 Release Partyの資料です。

Go 1.12 Release Party in Tokyo w/ Fukuoka&Umeda
https://gocon.connpass.com/event/118022/

詳細はブログにまとめてあります。
https://budougumi0617.github.io/2019/02/15/go-modules-on-go112/

Eb6be531bcfaa99714d8d3b48665a5a9?s=128

Yoichiro Shimizu

February 15, 2019
Tweet

Transcript

  1. 1.

    Go Modules in Go1.12 Go 1.12 Release Party, FEB 15

    2019 Yoichiro Shimizu freee k.k. @budougumi0617
  2. 2.

    自己紹介 • 清水 陽一郎 @budougumi0617 ◦ Backend Engineer ◦ Go

    / Ruby • Blog ◦ https://budougumi0617.github.io/ • 自作キーボード(来週4台目つくる)
  3. 3.

    Today’s contents Introduction 00 What is Modules(vgo) GOPATH mode &

    module-aware mode go mod command & go.mod file 01 02 03 04 Changes in Go 1.12 Today’s summary 05
  4. 6.

    • 新しい依存パッケージのバージョン管理構想 • 2018年2月にRuss Cox-sanが発表 ◦ Go & Versioning |

    research!rsc • 当初はvgoとして提供 ◦ https://github.com/golang/vgo • Go1.11からはGo本体に試験的に導入されている About Go Modules
  5. 7.

    • Modules登場以前は以下の手法が取られていた ◦ go get ▪ go1タグ・ブランチor最新masterブランチ ◦ glideやdepなどのサードパーティ製ツール ▪

    https://github.com/Masterminds/glide ▪ https://github.com/golang/dep • 最近までdepが主流だった…? ◦ 2018/06くらいはvgoはまだ辛い記事などがあったり… Before Go Modules
  6. 13.

    • GOPATH mode ◦ バージョン 1.10 までと同じ挙動をする ◦ 標準pkg以外を全部 GOPATH

    以下のディレクトリで管理する ◦ パッケージの管理はリポジトリの最新リビジョンのみが対象となる Go Modules has 2 modes
  7. 15.

    • GO111MODULEという環境変数で切り替わる。 ◦ off ▪ 常にGOPATH modeで動作する ◦ on ▪

    常にmodule-aware modeで動作する ◦ auto (Go1.11のデフォルト) ▪ $GOPATH 配下ではGOPATH mode ▪ それ以外のディレクトリではmodule-aware mode Go Modules has 2 modes
  8. 16.

    default is “auto” on Go1.12 Go 1.12, scheduled for February

    2019, will refine module support but still leave it in auto mode by default. Our aim is for Go 1.13, scheduled for August 2019, to enable module mode by default (that is, to change the default from auto to on) and deprecate GOPATH mode. Go Modules in 2019より引用
  9. 21.

    • module ◦ ルートディレクトリのモジュール名 • require ◦ 必要なモジュール名とバージョン名を指定する • exclude

    ◦ 明示的に除外するモジュールを指定する • replace ◦ requireで指定したモジュール名を置き換える Directives in go.mod
  10. 22.

    • go modで取得したバイナリのありか ◦ $GOPATH/pkg/mod/以下にキャッシュされている • Modulesを利用したCIのプラクティス ◦ timakin/go-module |

    CircleCI Orbs Registory ◦ GitHub Actions で Go 1.11 Modules のキャッシュを使う方法 • go mod tidyコマンドで不要な依存関係を削除 ◦ 何気ないgo getがgo.modを傷つけている Tips 発表後@songmuさんから指摘いただきました。 tidyは「ティディ」ではなく「タイディ」と読むそうです。 https://twitter.com/songmu/status/1096368547146559493
  11. 24.

    • Go 1.12 Release Notes ◦ https://tip.golang.org/doc/go1.12 • 大きく4つ ◦

    モジュール管理外でもgo getなどができるようになった ◦ go env GOMODが/dev/nullを報告する ◦ go.modに言語バージョンが保存される。 ◦ replaceでローカルのディレクトリを参照できるようになった ◦ replaceでバージョン別にディレクトリを指定できるようになった Changes in the release notes