by shigemk2

当面は技術的なことしか書かない

Apple Siliconのbrew install go

go 1.16 beta 1

$ brew install -s go
==> Cloning https://go.googlesource.com/tools.git
Updating /path/to/Library/Caches/Homebrew/go--gotools--git
==> Checking out branch release-branch.go1.15
Already on 'release-branch.go1.15'
Your branch is up to date with 'origin/release-branch.go1.15'.
HEAD is now at c1934b75 go/analysis: improve error message for string(int) warning
==> Downloading https://storage.googleapis.com/golang/go1.16beta1.darwin-arm64.tar.gz
Already downloaded: /path/to/Library/Caches/Homebrew/downloads/329a1907ce566a8804205ccd8adceba8f8b6efe18dfa36fcafa877cd37977688--go1.16beta1.darwin-arm64.tar.gz
==> Downloading https://golang.org/dl/go1.16beta1.src.tar.gz
==> Downloading from https://dl.google.com/go/go1.16beta1.src.tar.gz
######################################################################## 100.0%
==> ./make.bash --no-clean
==> /opt/homebrew/Cellar/go/1.15.6/bin/go install -race std
==> go build
==> Caveats
This is a beta version of the Go compiler for Apple Silicon
(Go 1.16beta1).
==> Summary
🍺  /opt/homebrew/Cellar/go/1.15.6: 10,058 files, 522.2MB, built in 1 minute 12 seconds

マージされたものですから。 github.com

Apple Silicon HomebrewのGo進捗っぽいやつ

Goに対する知識はほとんどない。ghqとかにプルリク投げてたくらい。

今のBigSur M1じゃGoをHomebrewインストールできないけど、なんとかしようとしている。 HomebrewのGoはソースコードをmake.bashでビルドすることでインストールしているけど、./make.bash --no-clean 実行中に以下エラーになる。

./make.bash: line 184: 94599 Segmentation fault: 11 GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist

Goよく知らないけど、最近のGoはGo1.4以上を事前に入れないとビルドができない。 Goをビルドする前にbootstrapのGoを事前にインストールしていてそれが1.7なんだ。とても古い。

具体的にはこの辺り(直近1.15.6もプルリク投げたけどgodep周りで他のGo依存フォーミュラが盛大にインストールできなくなってるからコアコミッターさんなどのご協力もありなんとかbumpできた) homebrew-core/go.rb at 798511ad089608e1a92f0e82e93bf016e073c90b · Homebrew/homebrew-core · GitHub

Segmentation faultの根本原因は不明なんだけど、Segmentation faultが出るのは古いboostrap Goを使っているのが原因で、これをバージョンアップすることによって解決する。 http://storage.googleapis.com/golang

Go 1.16がM1対応していて、brew install go --HEAD したら一応最新版がビルドできるけど、前述のbootstrapのgoのバージョンが古すぎてSegmentation faultなのを解決しようとしたプルリクがこれ。

github.com

通常ベータ版はstableに入れないけど、Goは他パッケージとの兼ね合いで影響範囲がデカすぎるから事前に入れてしまおうというのが今の流れ。 github.com