Go1.19 new features
Go 1.19 で追加された機能や変更点について雑多に書き連ねていく
LoongArch アーキテクチャ(中国企業の完全オリジナルCPU命令セット)のサポート
プリミティブ型をアトミックに扱いやすくなる型が sync/atomic パッケージに追加(今までは atomic.Value で何とかやりくりしていた)
sort パッケージのソートアルゴリズムが一部書き直された
pattern-defeating quicksort
sort パッケージに Search 関数に似た Find 関数が追加された
image/draw パッケージの Draw 関数が後方互換性を満たしていなかったので修正
環境変数 GOMEMLIMIT でランタイムのメモリ使用量を制限できるようになった
制限されるのはヒープ及びランタイムが管理するメモリのみ
CGO などにより他の言語が使用するメモリや、実行バイナリ自身、OS が管理するメモリは制限されない
GC を off にしている場合でも機能する
fmt パッケージに Append, Appendf, Appendln 関数が追加された
あらかじめ用意した byte slice に対し、要素を byte slice 化したものを追加するときに使う
net/url パッケージに JoinPath 関数と URL.JoinPath メソッドが追加された
第一引数に渡されたベースの URL と、第二引数以降に渡された文字列をくっつけた URL を作る
Linux で Race Detector を使う場合は最新の glibc と binutils(glibc: 2.17, binutils: 2.26)が必須になった
riscv64 でもレジスタベースの引数を取れるようになり、10%以上パフォーマンスが向上した
GC についての包括的なドキュメントが追加された
rsc のブログに記載されていた Memory Model の内容が簡潔になりドキュメントにまとめられた
Go独自のメモリモデルではなく、C, C++, Java, JavaScript, Swift, Rust などと同様のメモリモデルに変更
ビルド制約 //go:build
で unix like な OS を指定できるようになった
unix like な OS と判断されるのは GOOS が次のいずれかの場合である
- aix
- android
- darwin
- dragonfly
- freebsd
- hurd
- illumos
- ios
- linux
- netbsd
- openbsd
- solaris
GoDoc でリンク、リスト、見出しがサポートされた
また、go/doc/comment が標準パッケージとして入り、HTML, Markdown 等で GoDoc を出力できるようになった
govet で errors.As を呼ぶときによく起こす間違いをチェックできるようになった
頻繁に GC が実行されるのを防ぐために、GC の実行時間よりもアプリケーションの実行時間が長い場合は GC が実行されないようになった
os/exec パッケージの Command や LookPath は、環境変数 PATH を元にしてコマンドを検索するが、セキュリティの都合で相対パスで設定される PATH は検索対象から除外されるようになった
encoding/binary パッケージに関数 AppendUvarint, AppendVarint が追加され、byte スライスに整数をそのまま追加しやすくなった
flag パッケージに関数 TextVar が定義され、encoding.TextUnmarshaler に対応した値をフラグ経由で入力しやすくなった
つまり、big.Int, netip.Addr, time.Time などを変換を挟まずに入力できるようになった