go install時に勝手に新しいgoがダウンロードされる?(Go Toolchains)

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
  1. 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
  1. 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をダウンロードして使ってくれるようです.便利ですね.

でも容量結構食うし今回の環境のような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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)