Go製のアプリをgo installで導入したところ新しいバージョンのgoが自動的にダウンロードされて使われました.これは何だろうと少し調べてみました.
go install でnostr clientのalgiaをインストールしました.途中でgo 1.23.4がダウンロードされています.
$ go install github.com/mattn/algia@latest go: downloading github.com/mattn/algia v0.0.84 go: github.com/mattn/algia@v0.0.84 requires go >= 1.23.0; switching to go1.23.4 go: downloading go1.23.4 (linux/arm) (1) go: downloading github.com/mdp/qrterminal/v3 v3.2.0 go: downloading github.com/nbd-wtf/go-nostr v0.38.1 go: downloading github.com/urfave/cli/v2 v2.27.4 go: downloading github.com/btcsuite/btcd/btcec/v2 v2.3.4 go: downloading github.com/btcsuite/btcd/btcutil v1.1.6 go: downloading github.com/gobwas/httphead v0.1.0 go: downloading github.com/gobwas/ws v1.4.0 go: downloading github.com/mailru/easyjson v0.7.7 go: downloading github.com/puzpuzpuz/xsync/v3 v3.4.0 go: downloading github.com/tidwall/gjson v1.18.0 go: downloading github.com/fiatjaf/eventstore v0.11.0 go: downloading golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 go: downloading github.com/graph-gophers/dataloader/v7 v7.1.0 go: downloading rsc.io/qr v0.2.0 go: downloading github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 go: downloading github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.5 go: downloading github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 go: downloading github.com/gobwas/pool v0.2.1 go: downloading github.com/josharian/intern v1.0.0 go: downloading github.com/tidwall/match v1.1.1 go: downloading github.com/tidwall/pretty v1.2.1 go: downloading github.com/fiatjaf/generic-ristretto v0.0.1 go: downloading github.com/decred/dcrd/crypto/blake256 v1.1.0 go: downloading github.com/dustin/go-humanize v1.0.1 go: downloading github.com/golang/glog v1.2.2
-
go 1.23.4がダウンロードされている
gup checkで確認すると今回のalgiaはgo1.23.4でbuildされていて,他のはgo1.22.1です.
$ gup check check binary under $GOPATH/bin or $GOBIN [1/8] github.com/mattn/algia (Already up-to-date: v0.0.84 / go1.23.4) (1) [2/8] github.com/darkhz/bluetuith (current: v0.2.2, latest: v0.2.3 / go1.22.1) [3/8] github.com/mattn/bsky (current: v0.0.61, latest: v0.0.67 / go1.22.1) [4/8] github.com/bloznelis/typioca (current: v0.0.0-20240403160848-1c6a0ac60a1a, latest: v0.0.0-20241028092943-0f1ec70f7d95 / go1.22.1) [5/8] github.com/mikuta0407/misskey-cli (current: v0.0.0-20230730142608-ab80e8e6583c, latest: v0.3.1 / current: go1.19.8, installed: go1.22.1) [6/8] github.com/nao1215/gup (Already up-to-date: v0.27.5 / go1.22.1) [7/8] github.com/maaslalani/nap (Already up-to-date: v0.1.1 / go1.22.1) [8/8] github.com/sqshq/sampler (Already up-to-date: v1.1.0 / go1.22.1) If you want to update binaries, run the following command. $ gup update bluetuith bsky typioca misskey-cli
-
algiaだけgo1.23.4が使われている
インストールされているgoを確認するとgo1.22.1です.
$ which go /usr/bin/go $ go version go version go1.22.1 linux/arm
$GOPATHの下を見るとgo1.23.4があります.
$ ~/go/pkg/mod/golang.org/toolchain\@v0.0.1-go1.23.4.linux-arm/bin/go version go version go1.23.4 linux/arm $ du -Hs ~/go/pkg/mod/golang.org/toolchain\@v0.0.1-go1.23.4.linux-arm 243424 /home/matoken/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.4.linux-arm
go.modのこの辺りが効いていそうです.
$ head go/pkg/mod/github.com/mattn/algia@v0.0.84/go.mod module github.com/mattn/algia go 1.23.0 toolchain go1.23.1 require ( github.com/fatih/color v1.17.0 github.com/mdp/qrterminal/v3 v3.2.0 github.com/nbd-wtf/go-nostr v0.38.1
これは何だろうとgo toolchainとかで検索してみるとgo 1.21からの機能で必要なバージョンのgoを指定することで自動的に必要なgoをダウンロードして使ってくれるようです.便利ですね.
-
Sessions | Go Conference 2024 「Go1.21から導入されたGo Toolchainの仕組みをまるっと解説」
でも容量結構食うし今回の環境のようなRaspberry Pi環境ではちょっと辛い.クロスビルドとかするといいんでしょうがちょっとツールを試すだけだと面倒…….ビルド後に掃除する感じがいいんですかね.
環境
$ dpkg-query -W golang-1.19 golang-1.22 golang golang:armhf 2:1.19~1 golang-1.19 1.19.8-2 golang-1.22 1.22.1-1~bpo12+1 $ lsb_release -dr No LSB modules are available. Description: Raspbian GNU/Linux 12 (bookworm) Release: 12 $ arch armv7l