Goブログ
Go 1.9リリース
本日、GoチームはGo 1.9のリリースを発表できることを嬉しく思います。ダウンロードページから入手できます。言語、標準ライブラリ、ランタイム、ツールに多くの変更が加えられています。この投稿では、最も重要な目に見える変更について説明します。このリリースに投入されたエンジニアリング作業の大部分は、ランタイムとツールの改善に向けられており、それほどエキサイティングな発表ではありませんが、それでも素晴らしいリリースです。
言語への最も重要な変更点は、型エイリアスの導入です。これは、段階的なコード修復をサポートするために作成された機能です。型エイリアスの宣言は次の形式になります。
type T1 = T2
この宣言は、byte
が常にuint8
のエイリアスであるのと同じように、型T2
のエイリアス名T1
を導入します。型エイリアスの設計ドキュメントとリファクタリングに関する記事では、この追加について詳しく説明しています。
新しいmath/bitsパッケージは、符号なし整数のビットカウントと操作関数を提供し、可能な場合は特別なCPU命令によって実装されます。たとえば、x86-64システムでは、bits.TrailingZeros(x)
はBSF命令を使用します。
sync
パッケージには、新しいMap型が追加され、同時アクセスに対して安全になりました。ドキュメントから詳細を読むことができ、それが作成された理由については、このGopherCon 2017ライトニングトーク(スライド)で詳細を学ぶことができます。これはGoのmap型の一般的な代替ではありません。いつ使用するべきかについては、ドキュメントを参照してください。
testing
パッケージにも追加があります。testing.Tとtesting.Bの両方に追加された新しいHelper
メソッドは、呼び出し側の関数をテストヘルパー関数としてマークします。testingパッケージがファイルと行の情報を印刷するときは、ヘルパー関数自体の行ではなく、ヘルパー関数の呼び出しの場所が表示されます。
たとえば、次のテストを考えてみてください。
package p
import "testing"
func failure(t *testing.T) {
t.Helper() // This call silences this function in error reports.
t.Fatal("failure")
}
func Test(t *testing.T) {
failure(t)
}
failure
は自身をテストヘルパーとして識別するため、Test
中に印刷されるエラーメッセージは、failure
が呼び出された11行目ではなく、failure
がt.Fatal
を呼び出した7行目を示します。
time
パッケージは現在、各Time
値で単調時間を透過的に追跡しているため、ウォールクロックの調整がある場合でも、2つのTime
値間の期間を計算する操作が安全になります。たとえば、このコードは、うるう秒クロックのリセット後でも正しい経過時間を計算します。
start := time.Now()
f()
elapsed := time.Since(start)
詳細については、パッケージドキュメントと設計ドキュメントを参照してください。
最後に、Goコンパイラの速度を向上させるための取り組みの一環として、Go 1.9はパッケージ内の関数を同時にコンパイルします。
Go 1.9には、さらに多くの追加、改善、修正が含まれています。上記の改善に関する詳細情報と、変更の完全なセットについては、Go 1.9リリースノートを参照してください。
リリースを祝って、世界中のGoユーザーグループがリリースパーティーを開催しています。
次の記事: コミュニティアウトリーチワーキンググループ
前の記事: コントリビューションワークショップ
ブログインデックス