Go modulesを理解する.
大学の講義でGolangを触る機会があって,もう一度Golangをトライしてみたいと思った.
今回は,2年の頃に引っかかってGolangから離れてしまった原因のGo modulesを理解しようと思う.
あの時はgopathとかgo modとかがこんがらがってしまってた.
今だったら理解できるはず...
いろいろやっていく.
gomodules が on の状態:module-aware mode 従来の状態: GOPATH mode
module-aware modeの時とGOPATH mode の時では,go get の挙動が変わる.module-aware modeの時はパッケージが$GOPATH/pkg/mod 以下でバージョン毎に管理され,モジュール内のgo.modとgo.sumが書き換わる.
今現在module-aware mode時のgo getを module-aware go get として言い分けしている.
利用可能なモジュールを集約しているmodule index.利用価値があるものなのかはわからない.
あらゆるモジュールのチェックサムを集約しているsumdbというサービスがある.これのおかげで安全にgo get できてるのか.
golangのモジュールを作ったとして,それを一旦go get できるようにしてしまうと,proxyに保存されて実質永久に残ることになる.
Go 1.13では $GOPROXYという環境変数が使えるようになり,デフォルトでは,https://proxy.golang.org,direct となっている.一旦proxyサーバにgetしに行って,ダメだったらモジュールの提供サーバーへ直接取りに行く感じ.
goenvなるものがあるらしい!pyenvみたいに使えるのか?入れてみた!
現行は1.14だけどgoenvでインストール可能な最新バージョンは1.12betaまでだった.更新されてないの?
一緒にdirenvというディレクトリ毎に環境変数を設定できるツールが紹介されていた.
brewでインストールできるみたい.覚えておこう.
Go modulesの源泉はGoのメインリポジトリ外で開発が進められたvgo.
go.modファイルを開発者同士で共有すればパッケージのバージョンを揃えた開発が可能になるのか.
パッケージ名はディレクトリ名と同じにするのが通例.
なんか面白そうな記事が紹介されてた.
Golang以外にもawesomeなんちゃらっていうqiitaの記事があるからもし他言語を勉強することがあったらawesomeなんちゃらを探してみよう.
go mod init する時はgo mod init github.com/username/appname
の形が一般的かも.
基本的な動作は blog.golang.org
ここに書いてある.
Go modulesってただのパッケージマネージャーという認識であってるか.
go.sumは開発者間で共有すべきファイルである.
go mod edit コマンドでreplaceをgo.modに追記することで,local file path をパッケージの参照先に指定できる.