DebianパッケージのGoバージョンを切り替える

手元のDebian sid環境にはDebinパッケージのいくつかのバージョンのGoが導入されています.

$ dpkg-query -W golang-1.??
golang-1.12     1.12.12-1
golang-1.15     1.15.15-1
golang-1.16     1.16.7-1
golang-1.17     1.17-2

現在は1.15に向いているようです.

$ go version
go version go1.15.15 linux/amd64
$ ls -l /usr/bin/go
lrwxrwxrwx 1 root root 21 Sep 17  2020 /usr/bin/go -> ../lib/go-1.15/bin/go

update-alternatives にあるかな?とみてみると見当たりません.

$ sudo update-alternatives --display go
update-alternatives: error: no alternatives for go
$ sudo update-alternatives --display go-lang
update-alternatives: error: no alternatives for go-lang
$ sudo update-alternatives --get-selections | grep -i go
bogofilter                     auto     /usr/bin/bogofilter-bdb
fonts-japanese-gothic.ttf      auto     /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf
google-chrome                  auto     /usr/bin/google-chrome-stable
vendor-logos                   auto     /usr/share/desktop-base/debian-logos

手動で update-alternatives に登録して,

$ sudo update-alternatives --install /usr/bin/go go /lib/go-1.12/bin/go 200 --slave /usr/bin/gofmt gofmt /lib/go-1.12/bin/gofmt
$ sudo update-alternatives --install /usr/bin/go go /lib/go-1.15/bin/go 200 --slave /usr/bin/gofmt gofmt /lib/go-1.15/bin/gofmt
$ sudo update-alternatives --install /usr/bin/go go /lib/go-1.16/bin/go 200 --slave /usr/bin/gofmt gofmt /lib/go-1.16/bin/gofmt
$ sudo update-alternatives --install /usr/bin/go go /lib/go-1.17/bin/go 200 --slave /usr/bin/gofmt gofmt /lib/go-1.17/bin/gofmt
Note
2021-09-03編集 ++
--slave /usr/bin/gofmt gofmt 〜 を追加して gofmt コマンドも追従するようにした.

今回は 1.16 にしてみます.

$ sudo update-alternatives --config go
There are 4 choices for the alternative go (providing /usr/bin/go).

  Selection    Path                 Priority   Status
------------------------------------------------------------
  0            /lib/go-1.12/bin/go   200       auto mode
* 1            /lib/go-1.12/bin/go   200       manual mode
  2            /lib/go-1.15/bin/go   200       manual mode
  3            /lib/go-1.16/bin/go   200       manual mode
  4            /lib/go-1.17/bin/go   200       manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /lib/go-1.16/bin/go to provide /usr/bin/go (go) in manual mode
$ sudo update-alternatives --display go
go - manual mode
  link best version is /lib/go-1.16/bin/go
  link currently points to /lib/go-1.16/bin/go
  link go is /usr/bin/go
/lib/go-1.12/bin/go - priority 200
/lib/go-1.15/bin/go - priority 200
/lib/go-1.16/bin/go - priority 200
/lib/go-1.17/bin/go - priority 200
$ go version
go version go1.16.7 linux/amd64

hello worldやGo 1.16 以降用のsourceもbuildできたのでとりあえず動いていそうです.

$ cat << __EOF__ > hello.go
> package main
>
> import "fmt"
>
>
func main() {
    fmt.Println("hello world")
}
> __EOF__
$ go run ./hello.go
hello world
環境
$ dpkg-query -W golang-1.?? dpkg
dpkg    1.20.9
golang-1.12     1.12.12-1
golang-1.15     1.15.15-1
golang-1.16     1.16.7-1
golang-1.17     1.17-2
$ lsb_release -dr
Description:    Debian GNU/Linux bookworm/sid
Release:        unstable
$ arch
x86_64

コメントを残す

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

Your post must include a link to this post.

How does this work?
Write a response on your own website and include a link to this post. Then submit your response’s URL here. Your response may appear here after moderation. To update or remove it, edit or delete your original post and submit the same URL again. Learn more about Webmentions.