Go 1.17 がリリースされた
Go 1.17 がリリースされた。
毎度のごとく変更は多岐にわたるが,個人的に気になった部分を挙げておく。
- スライス
[]T
から配列ポインタ*[N]T
への変換ができるようになったそうな
s := make([]byte, 2, 4)
s0 := (*[0]byte)(s) // s0 != nil
s1 := (*[1]byte)(s[1:]) // &s1[0] == &s[1]
s2 := (*[2]byte)(s) // &s2[0] == &s[0]
s4 := (*[4]byte)(s) // panics: len([4]byte) > len(s)
unsafe.Add
およびunsafe.Slice
の導入windows/arm64
アーキテクチャのサポートgo.nmod
でgo 1.17
以降が指定されている場合,間接的な依存モジュールも記述するよう要求されるようになった。とりあえずgo mod tidy -go=1.17
とすればgo
ディレクティブごといい感じに更新してくれるらしいgo.nmod
でmodule
ディレクティブの直前行に// Deprecated: comment
とつけることで,非推奨のワーニングを出せるようになった
// Deprecated: use example.com/mod/v2 instead.
module example.com/mod
- ビルドの制御を行う
// +build
が//go:build
に変更になる。とりあえず 1.17 では両方有効らしい。サンプルファイルとか// +build run
とか山ほど書いてるんだが,どうしよう… go run
コマンドがモジュール・バージョンを受け入れるようになった。これ GitHub Actions とかで重宝しそうだな(笑)
$ go run github.com/spiegel-im-spiegel/gpgpdump@latest -h
go: downloading github.com/spiegel-im-spiegel/gpgpdump v0.12.4
...
OpenPGP (RFC 4880) packet visualizer by golang.
Usage:
gpgpdump [flags]
...
- スタックではなくレジスタ・ベースの関数呼び出しがサポートされた。5%くらい速くなるらしい。サイズもちょびっと小さくなるようだ
- 関数閉包(closure)を含む関数をインライン展開できるようになった
rune
型の変数が負値の場合に関連するメソッドがエラーとなるよう挙動が変わったようだgo test
に-shuffle
オプションが追加された。テスト順序をシャッフルしてくれるらしいtime
.Time
型にGoString()
メソッドが追加された。なんだこれ(笑)
package main
import (
"fmt"
"time"
)
func main() {
fmt.Printf("%#v\n", time.Now())
// Output:
// time.Date(2009, time.November, 10, 23, 0, 0, 0, time.Local)
}
例によって Ubuntu の APT で管理している Go コンパイラは古いので,ダウンロードページからバイナリ(go1.17.linux-amd64.tar.gz
)を取ってきて手動でインストールすることを強く推奨する。
以下は手動での作業例。
$ cd /usr/local/src
$ sudo curl -L "https://golang.org/dl/go1.17.linux-amd64.tar.gz" -O
$ cd ..
$ sudo unlink go # 以前の Go が入っている場合
$ sudo tar xvf src/go1.17.linux-amd64.tar.gz
$ sudo mv go go1.17
$ sudo ln -s go1.17 go
$ go version # /usr/local/go/bin にパスが通っている場合
go version go1.17 linux/amd64
アップデートは計画的に。 Zenn 記事の「Go のモジュール管理」は書き直さないとなぁ。
ブックマーク
- Go1.17のencoding/csv | フューチャー技術ブログ
- Go1.17における go get の変更点 | フューチャー技術ブログ
- Go 1.17 Release祝い 細かすぎて伝わらないMinor change in flag package
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。