> Source: https://www.ymotongpoo.com/works/goblog-ja/go1.2/


# Go 1.2 リリース

[Go 1.2 is released](https://go.dev/blog/go1.2) by Andrew Gerrand

Go プログラミング言語の最新の安定版である Go 1.2 のリリースを発表できることを嬉しく思います。

バイナリ配布物は[いつもの場所](https://go.dev/doc/install)からダウンロードできます。もしソースから
[コンパイル](https://go.dev/doc/install/source)したい場合は、`release` タグか `go1.2` タグを使ってください。

今回の新しいリリースは、5月にリリースされた Go 1.1 からおよそ7ヶ月後のものであり、1.1 と 1.0 の間の14ヶ月と比べると
かなり短い間隔になっています。今後のメジャーリリースの間隔もこれと同程度になると見込んでいます。

[Go 1.2](https://go.dev/doc/go1.2) には、いくつかの小さな言語仕様の変更、言語の実装とツール群への数々の改善、
いくらかのパフォーマンス改善、そして標準ライブラリへの多くの追加や後方互換性を保ったままの変更が含まれています。

詳細はすべて[リリースノート](https://go.dev/doc/go1.2)を読んでください。中には、バグを含む既存のプログラムの
振る舞いに影響を与える変更もあります。以下ではこのリリースのハイライトを紹介します。

新しい[3つのインデックスを持つスライス構文](https://go.dev/doc/go1.2#three_index)により、長さだけでなく容量も指定できる
ようになりました。これにより、プログラマは基底配列のうち限られた部分にしかアクセスできないスライス値を渡せるようになります。
これは以前は unsafe パッケージを使わなければ実現できなかったテクニックです。

ツールチェインにおける大きな新機能は、[テストカバレッジ結果](https://go.dev/doc/go1.2#cover)を計算して表示する機能です。
詳細は [`go test`](https://go.dev/cmd/go/#hdr-Description_of_testing_flags) と
[cover ツール](https://golang.org/x/tools/cmd/cover)のドキュメントを参照してください。今週後半には、この新機能を
詳しく解説する記事を公開する予定です。

ゴルーチンは[プリエンプティブにスケジューリング](https://go.dev/doc/go1.2#preemption)されるようになりました。
これは、関数に入るタイミングでときどきスケジューラが呼び出されるようになったということです。これにより、
忙しいゴルーチンが同じスレッド上の他のゴルーチンを飢餓状態にしてしまうことを防げます。

ゴルーチンのデフォルトのスタックサイズが引き上げられたことで、一部のプログラムのパフォーマンスが改善されるはずです。
以前のサイズでは、パフォーマンスが重要な箇所で高コストなスタックセグメントの切り替えが発生しがちでした。
その一方で、[スタックサイズ](https://go.dev/doc/go1.2#stack_size)と
[オペレーティングシステムのスレッド数](https://go.dev/doc/go1.2#thread_limit)への新しい制限により、
不具合のあるプログラムがマシンのリソースをすべて消費してしまうことを防げるはずです。
これらの制限は、[`runtime/debug` パッケージ](https://go.dev/pkg/runtime/debug)にある新しい関数を使って調整できます。

最後に、[標準ライブラリへの数多くの変更](https://go.dev/doc/go1.2#library)の中でも重要なものとして、
新しい[`encoding` パッケージ](https://go.dev/doc/go1.2#encoding)、`Printf` の書式文字列における
[インデックス付き引数](https://go.dev/doc/go1.2#fmt_indexed_arguments)、そしてテンプレート関連パッケージへの
[便利な追加機能](https://go.dev/doc/go1.2#text_template)が挙げられます。

このリリースの一環として、[Go Playground](https://go.dev/play/) も Go 1.2 に更新されました。これにより、
[Go Tour](https://go.dev/tour/) やこのブログなど、Playground を利用しているサービスにも影響があります。
この更新では、サンドボックス内でスレッドや `os`、`net`、`unsafe` の各パッケージを使えるようにもなり、
より実際の Go 環境に近い形になりました。

バグ報告を送ってくれた多くのユーザーから、コアに1600以上の変更をコミットしてくれた116人ものコントリビューターまで、
今回のリリースを実現するために力を貸してくれたすべての人へ。皆さんの協力はこのプロジェクトにとってかけがえのないものです。
ありがとうございました！

_この記事は、[Gopher Academy](http://gopheracademy.com/) が贈る、12月1日から25日まで毎日更新される連載記事
[Go Advent Calendar](http://blog.gopheracademy.com/day-01-go-1.2) の第1回目です。_

By Andrew Gerrand

