Go1.1のリリースノート(日本語訳)

JavaScriptを有効にしてください

前書き

Go 1.1 のリリースノートをChatGPTで日本語に翻訳しました。
Go 1.1 Release Notes

次のバージョン:Go1.2のリリースノート(日本語訳)
前のバージョン:Go1のリリースノート(日本語訳)
リリースノート一覧:Goリリース情報

Go 1.1の紹介

2012年3月にリリースされたGoバージョン1 (略してGo 1またはGo 1.0)は、Go言語とライブラリに新たな安定期をもたらしました。この安定性は、世界中のGoユーザーとシステムの成長するコミュニティを育むのに役立ちました。それ以来、1.0.1、1.0.2、1.0.3といったいくつかの「ポイント」リリースが発行されました。これらのポイントリリースは既知のバグを修正しましたが、実装に対する重要でない変更は行われませんでした。

この新しいリリース、Go 1.1は、互換性の約束 を守りつつ、いくつかの重要な(もちろん後方互換性のある)言語の変更を追加し、(再び互換性のある)ライブラリの変更の長いリストを持ち、コンパイラ、ライブラリ、ランタイムの実装に大きな作業を含んでいます。焦点はパフォーマンスにあります。ベンチマークは最良でも不正確な科学ですが、多くのテストプログラムで顕著な、時には劇的な速度向上が見られます。Goのインストールを更新し再コンパイルするだけで、多くのユーザーのプログラムも改善されることを期待しています。この文書は、Go 1とGo 1.1の間の変更を要約しています。Go 1.1で動作するために修正が必要なコードはほとんどありませんが、このリリースで表面化するいくつかの稀なエラーケースがあり、それらが発生した場合には対処する必要があります。詳細は以下に記載されています。特に64ビット整数Unicodeリテラル の議論を参照してください。

言語の変更

Go互換性文書 は、Go 1言語仕様に従って書かれたプログラムが引き続き動作することを約束しており、その約束は維持されています。しかし、仕様を強化するために、いくつかのエラーケースの詳細が明確にされました。また、新しい言語機能もいくつかあります。

ゼロによる整数除算

Go 1では、定数ゼロによる整数除算はランタイムパニックを引き起こしました。

go
1
2
3
func f(x int) int {
    return x/0
}

Go 1.1では、定数ゼロによる整数除算は合法なプログラムではなく、コンパイル時エラーとなります。

Unicodeリテラルのサロゲート

文字列およびルーンリテラルの定義が、サロゲートハーフを有効なUnicodeコードポイントの集合から除外するように精緻化されました。詳細はUnicode セクションを参照してください。

メソッド値

Go 1.1では、特定のレシーバー値にバインドされた関数であるメソッド値 が実装されました。たとえば、Writerwがある場合、式w.Writeは常にwに書き込む関数であり、wを閉じ込めた関数リテラルと同等です。

go
1
2
3
func (p []byte) (n int, err error) {
    return w.Write(p)
}

メソッド値は、与えられた型のメソッドから関数を生成するメソッド式とは異なります。メソッド式(*bufio.Writer).Writeは、型(*bufio.Writer)のレシーバーを持つ追加の最初の引数を持つ関数と同等です。

go
1
2
3
func (w *bufio.Writer, p []byte) (n int, err error) {
    return w.Write(p)
}

更新: 既存のコードには影響しません。この変更は厳密に後方互換性があります。

戻り値の要件

Go 1.1以前では、値を返す関数は、関数の最後に明示的なreturnまたはpanicの呼び出しが必要でした。これは、プログラマーに関数の意味を明示させる簡単な方法でした。しかし、無限のforループのみを持つ関数のように、最後のreturnが明らかに不要な場合が多くあります。Go 1.1では、最後のreturnステートメントに関するルールがより寛容になりました。これは、関数が実行する最後のステートメントであることが保証される終了ステートメント の概念を導入します。例として、条件のないforループや、各半分がreturnで終わるif-elseステートメントがあります。関数の最後のステートメントが構文的に終了ステートメントであることが示される場合、最後のreturnステートメントは必要ありません。このルールは純粋に構文的であり、コード内の値には注意を払わず、複雑な分析を必要としません。更新: この変更は後方互換性がありますが、冗長なreturnステートメントやpanicの呼び出しを含む既存のコードは手動で簡素化される可能性があります。そのようなコードはgo vetによって識別できます。

実装とツールの変更

gccgoのステータス

GCCのリリーススケジュールはGoのリリーススケジュールと一致しないため、gccgoのリリースにはいくらかのずれが避けられません。2013年3月に出荷されたGCCの4.8.0バージョンには、ほぼGo 1.1バージョンのgccgoが含まれています。そのライブラリはリリースより少し遅れていますが、最大の違いはメソッド値が実装されていないことです。2013年7月頃には、完全なGo 1.1実装を提供するgccgoを搭載したGCCの4.8.2が出荷されることを期待しています。

コマンドラインフラグの解析

gcツールチェーンでは、コンパイラとリンカがGoフラグパッケージと同じコマンドラインフラグ解析ルールを使用するようになりました。これは従来のUnixフラグ解析からの逸脱です。これにより、ツールを直接呼び出すスクリプトに影響を与える可能性があります。たとえば、go tool 6c -Fw -Dfooは今後、go tool 6c -F -w -D fooと書く必要があります。

64ビットプラットフォームでの int のサイズ

言語は、int型とuint型が32ビットまたは64ビットであるかを実装が選択できるようにしています。以前のGoの実装では、すべてのシステムでintuintを32ビットにしていました。gcgccgoの実装は現在、AMD64/x86-64などの64ビットプラットフォームでintuintを64ビットにしています。これにより、64ビットプラットフォームで20億以上の要素を持つスライスの割り当てが可能になります。更新: ほとんどのプログラムはこの変更の影響を受けません。Goは異なる数値型 間の暗黙の変換を許可しないため、この変更によりコンパイルが停止するプログラムはありません。ただし、intが32ビットのみであるという暗黙の仮定を含むプログラムは動作が変わる可能性があります。たとえば、このコードは64ビットシステムでは正の数を、32ビットシステムでは負の数を出力します。

go
1
2
3
x := ^uint32(0) // xは0xffffffff
i := int(x)     // iは32ビットシステムで-1、64ビットシステムで0xffffffff
fmt.Println(i)

32ビット符号拡張を意図したポータブルコード(すべてのシステムで-1を生成する)は、代わりに次のように記述します。

go
1
i := int(int32(x))

64ビットアーキテクチャでのヒープサイズ

64ビットアーキテクチャでは、最大ヒープサイズが数ギガバイトから数十ギガバイトに大幅に拡大されました。(正確な詳細はシステムに依存し、変更される可能性があります。)32ビットアーキテクチャでは、ヒープサイズは変更されていません。更新: この変更は、既存のプログラムに影響を与えることなく、より大きなヒープで実行できるようにするはずです。

Unicode

UTF-16で65535を超えるコードポイントを表現できるようにするために、Unicodeはサロゲートハーフを定義しています。これは、大きな値の組み立てにのみ使用されるコードポイントの範囲であり、UTF-16でのみ使用されます。このサロゲート範囲のコードポイントは、他の目的には違法です。Go 1.1では、この制約がコンパイラ、ライブラリ、ランタイムによって尊重されています。サロゲートハーフは、ルーン値として、UTF-8としてエンコードされたとき、またはUTF-16として単独でエンコードされたときに違法です。たとえば、ルーンからUTF-8への変換で遭遇した場合、エンコーディングエラーとして扱われ、置換ルーンutf8.RuneError(U+FFFD)を生成します。このプログラムは、

go
1
2
3
4
5
import "fmt"

func main() {
    fmt.Printf("%+q\n", string(0xD800))
}

Go 1.0では"\ud800"を出力しましたが、Go 1.1では"\ufffd"を出力します。サロゲートハーフのUnicode値は、ルーンおよび文字列定数で違法になったため、’\ud800’や"\ud800"のような定数はコンパイラによって拒否されます。UTF-8エンコードされたバイトとして明示的に書かれた場合、そのような文字列は依然として作成できますが、たとえば"\xed\xa0\x80"のように。しかし、そのような文字列がルーンのシーケンスとしてデコードされると、たとえば範囲ループで、utf8.RuneError値のみを生成します。UTF-8でエンコードされたUnicodeバイトオーダーマークU+FEFFは、Goソースファイルの最初の文字として許可されるようになりました。バイトオーダーフリーのUTF-8エンコーディングでのその出現は明らかに不要ですが、一部のエディタはUTF-8エンコードされたファイルを識別する「マジックナンバー」としてマークを追加します。更新: サロゲートの変更によってほとんどのプログラムは影響を受けません。古い動作に依存するプログラムは、問題を回避するように修正する必要があります。バイトオーダーマークの変更は厳密に後方互換性があります。

レースデテクタ

ツールへの大きな追加はレースデテクタであり、同じ変数への同時アクセスによって引き起こされるプログラムのバグを見つける方法です。この新しい機能はgoツールに組み込まれています。現在のところ、Linux、Mac OS X、および64ビットx86プロセッサを搭載したWindowsシステムでのみ利用可能です。プログラムをビルドまたはテストするときに-raceフラグを設定して有効にします(たとえば、go test -race)。レースデテクタは別の記事 で文書化されています。

gc アセンブラ

intが64ビットに変更され、新しい内部関数の表現 が導入されたため、gcツールチェーンでのスタック上の関数引数の配置が変更されました。アセンブリで書かれた関数は、少なくともフレームポインタオフセットを調整するために修正する必要があります。更新: go vetコマンドは、アセンブリで実装された関数が実装するGo関数プロトタイプと一致することを確認します。

go コマンドの変更

go コマンドには、新しいGoユーザーの体験を向上させることを目的としたいくつかの変更が加えられました。まず、Goコードをコンパイル、テスト、または実行する際に、パッケージが見つからない場合に検索されたパスのリストを含む、より詳細なエラーメッセージを表示するようになりました。

bash
1
2
3
4
$ go build foo/quxx
can't load package: package foo/quxx: cannot find package "foo/quxx" in any of:
        /home/you/go/src/pkg/foo/quxx (from $GOROOT)
        /home/you/src/foo/quxx (from $GOPATH)

次に、go getコマンドは、パッケージソースをダウンロードする際のデフォルトの宛先として$GOROOTを許可しなくなりました。go getコマンドを使用するには、有効な$GOPATH が必要です。

bash
1
2
$ GOPATH= go get code.google.com/p/foo/quxx
package code.google.com/p/foo/quxx: cannot download, $GOPATH not set. For more details see: go help gopath

最後に、前述の変更の結果として、$GOPATH$GOROOTが同じ値に設定されている場合、go getコマンドも失敗します。

bash
1
2
3
$ GOPATH=$GOROOT go get code.google.com/p/foo/quxx
warning: GOPATH set to GOROOT (/home/you/go) has no effect
package code.google.com/p/foo/quxx: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath

go test コマンドの変更

go test コマンドは、プロファイリングが有効な状態で実行されたときにバイナリを削除しなくなり、プロファイルを分析しやすくなりました。実装は-cフラグを自動的に設定するため、実行後に

bash
1
$ go test -cpuprofile cpuprof.out mypackage

mypackage.testファイルはgo testが実行されたディレクトリに残ります。go test コマンドは、ゴルーチンがブロックされている場所、つまりチャネル通信などのイベントを待っている場所を報告するプロファイリング情報を生成できるようになりました。この情報は、go test-blockprofileオプションで有効にされるブロッキングプロファイルとして提示されます。詳細についてはgo help testを実行してください。

go fix コマンドの変更

通常go fixとして実行されるfix コマンドは、Go 1以前のコードをGo 1 APIを使用するように更新する修正を適用しなくなりました。Go 1.1にプレGo 1コードを更新するには、まずGo 1.0ツールチェーンを使用してコードをGo 1.0に変換します。

ビルド制約

「go1.1」タグがデフォルトのビルド制約 のリストに追加されました。これにより、Go 1.1の新機能を活用しながら、以前のバージョンのGoとの互換性を維持することができます。Go 1.1以降のみでファイルをビルドするには、このビルド制約を追加します。

go
1
// +build go1.1

Go 1.0.xのみでファイルをビルドするには、逆の制約を使用します。

go
1
// +build !go1.1

追加プラットフォーム

Go 1.1ツールチェーンは、freebsd/armnetbsd/386netbsd/amd64netbsd/armopenbsd/386openbsd/amd64プラットフォームの実験的サポートを追加しました。freebsd/armまたはnetbsd/armにはARMv6以降のプロセッサが必要です。Go 1.1はlinux/armでのcgoの実験的サポートを追加しました。

クロスコンパイル

クロスコンパイル時に、goツールはデフォルトでcgoサポートを無効にします。cgoを明示的に有効にするには、CGO_ENABLED=1を設定します。

パフォーマンス

Go 1.1 gcツールスイートでコンパイルされたコードのパフォーマンスは、ほとんどのGoプログラムで顕著に向上するはずです。Go 1.0に対する典型的な改善は約30%-40%であるように見えますが、時にはそれ以上、時にはそれ以下、または全くないこともあります。ツールとライブラリを通じて多くの小さなパフォーマンス駆動の調整があり、すべてをここにリストすることはできませんが、以下の主要な変更は注目に値します。

gcコンパイラは多くの場合でより良いコードを生成し、特に32ビットIntelアーキテクチャでの浮動小数点に顕著です。gcコンパイラは、ランタイム内のappendやインターフェース変換などのいくつかの操作を含む、より多くのインライン化を行います。Goマップの新しい実装により、メモリフットプリントとCPU時間が大幅に削減されました。ガベージコレクタはより並列化されており、複数のCPUで実行されるプログラムのレイテンシを削減できます。ガベージコレクタはまた、より正確になり、わずかなCPU時間を要しますが、特に32ビットアーキテクチャでヒープのサイズを大幅に削減できます。ランタイムとネットワークライブラリのより緊密な結合により、ネットワーク操作でのコンテキストスイッチが減少します。

標準ライブラリの変更

bufio.Scanner

bufio パッケージのテキスト入力をスキャンするためのさまざまなルーチン、ReadBytesReadString 、特にReadLine は、単純な目的には不必要に複雑です。Go 1.1では、新しい型Scanner が追加され、行やスペースで区切られた単語のシーケンスとして入力を読み取るような単純なタスクを簡単に行えるようになりました。病的に長い行などの問題のある入力でスキャンを終了し、単純なデフォルト(行指向の入力で、各行の終端子を削除)を持つことで問題を簡素化します。以下は、入力を1行ずつ再現するコードです。

go
1
2
3
4
5
6
7
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
    fmt.Println(scanner.Text()) // Printlnは最後の'\n'を追加します
}
if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "reading standard input:", err)
}

スキャン動作は、入力を細分化する関数を通じて調整できます(SplitFunc のドキュメントを参照)が、困難な問題やエラーを超えて続行する必要がある場合は、古いインターフェースが依然として必要になることがあります。

net

net パッケージのプロトコル固有のリゾルバは、以前は渡されたネットワーク名に対して寛容でした。ドキュメントは、ResolveTCPAddr に対して有効なネットワークは"tcp"、“tcp4”、“tcp6"のみであることを明確にしていましたが、Go 1.0の実装は任意の文字列を黙って受け入れていました。Go 1.1の実装は、ネットワークがこれらの文字列のいずれかでない場合にエラーを返します。他のプロトコル固有のリゾルバResolveIPAddrResolveUDPAddrResolveUnixAddr についても同様です。ListenUnixgram の以前の実装は、接続エンドポイントの表現としてUDPConn を返していました。Go 1.1の実装は代わりにUnixConn を返し、ReadFrom およびWriteTo メソッドで読み書きできるようにします。データ構造IPAddrTCPAddrUDPAddr には、新しい文字列フィールドZoneが追加されました。タグなしの複合リテラル(例: net.TCPAddr{ip, port})を使用するコードは、新しいフィールドのために壊れるでしょう。Go 1の互換性ルールはこの変更を許可しています: クライアントコードはこのような破損を避けるためにタグ付きリテラルを使用する必要があります。更新: 新しい構造体フィールドによって引き起こされた破損を修正するために、go fixはこれらの型にタグを追加するようにコードを書き換えます。より一般的には、go vetはフィールドタグを使用するように修正すべき複合リテラルを識別します。

reflect

reflect パッケージにはいくつかの重要な追加があります。reflectパッケージを使用して「select」ステートメントを実行することが可能になりました。詳細については、SelectSelectCase の説明を参照してください。新しいメソッドValue.Convert (またはType.ConvertibleTo )は、Value 上でGoの変換または型アサーション操作を実行する機能を提供します(またはその可能性をテストします)。新しい関数MakeFunc は、既存のValues を使用して関数を呼び出しやすくするためのラッパー関数を作成し、たとえば実際のintを形式的なinterface{}に渡すために標準のGo変換を行います。最後に、新しい関数ChanOfMapOfSliceOf は、既存の型から新しいTypes を構築します。たとえば、Tのみを与えられた場合に型[]Tを構築します。

time

FreeBSD、Linux、NetBSD、OS X、OpenBSDでは、以前のtime パッケージはマイクロ秒精度で時間を返していました。これらのシステムでのGo 1.1の実装は、ナノ秒精度で時間を返すようになりました。マイクロ秒精度で外部フォーマットに書き込み、それを読み戻して元の値を回復することを期待するプログラムは、精度の損失によって影響を受けます。Time の新しいメソッドRoundTruncate は、外部ストレージに渡す前に時間から精度を削除するために使用できます。新しいメソッドYearDay は、時間値で指定された年の1から始まる整数の日番号を返します。Timer 型には、新しいメソッドReset があり、指定された期間後にタイマーが期限切れになるように変更します。最後に、新しい関数ParseInLocation は、既存のParse と似ていますが、解析された文字列のタイムゾーン情報を無視して、ロケーション(タイムゾーン)のコンテキストで時間を解析します。この関数は、時間APIでの一般的な混乱の原因に対処します。更新: 低精度の外部フォーマットを使用して時間を読み書きする必要があるコードは、新しいメソッドを使用するように変更する必要があります。

Expと古いサブツリーがgo.expとgo.textサブリポジトリに移動

バイナリディストリビューションが必要に応じてそれらにアクセスしやすくするために、バイナリディストリビューションに含まれていないexpoldソースサブツリーが、新しいgo.expサブリポジトリに移動されました。たとえば、ssaパッケージにアクセスするには、次のコマンドを実行します。

bash
1
$ go get code.google.com/p/go.exp/ssa

そしてGoソースで、

go
1
import "code.google.com/p/go.exp/ssa"

古いパッケージexp/normも移動されましたが、新しいリポジトリgo.textに移動され、Unicode APIやその他のテキスト関連パッケージが開発されます。

新しいパッケージ

新しいパッケージが3つあります。

go/format パッケージは、プログラムがgo fmt コマンドのフォーマット機能にアクセスするための便利な方法を提供します。2つの関数があります。Node はGoパーサーNode をフォーマットし、Source は任意のGoソースコードをgo fmt コマンドによって提供される標準フォーマットに再フォーマットします。net/http/cookiejar パッケージは、HTTPクッキーを管理するための基本を提供します。runtime/race パッケージは、データレース検出のための低レベルの機能を提供します。これはレースデテクタに内部的に使用され、他のユーザーに見える機能はエクスポートされていません。

ライブラリの小さな変更

以下のリストは、ライブラリへのいくつかの小さな変更、主に追加を要約しています。各変更についての詳細は、関連するパッケージのドキュメントを参照してください。

bytes

新しい関数TrimPrefixTrimSuffix があり、その特性は自明です。また、Buffer 型には、新しいメソッドGrow があり、バッファ内のメモリ割り当てをある程度制御します。最後に、Reader 型には新しいWriteTo メソッドがあり、io.WriterTo インターフェースを実装します。

compress/gzip

新しいFlush メソッドがあり、そのWriter 型の基礎となるflate.Writerをフラッシュします。

crypto/hmac

2つのMACを比較する新しい関数Equal があります。

crypto/x509

PEMブロックをサポートするようになりました(たとえば、DecryptPEMBlock を参照)し、楕円曲線秘密鍵を解析する新しい関数ParseECPrivateKey があります。

database/sql

接続の健全性をテストする新しいPing メソッドがあります。

database/sql/driver

パフォーマンスを向上させるためにConn が実装できる新しいQueryer インターフェースがあります。

encoding/json

Decoder には、バッファ内の残りのデータにアクセスするための新しいメソッドBuffered と、新しい型Number (文字列)に値をアンマーシャルするための新しいメソッドUseNumber があります。

encoding/xml

エスケープされたXML出力を書き込む新しい関数EscapeText と、インデントされた出力を指定するためのEncoder のメソッドIndent があります。

go/ast

新しい型CommentMap と関連するメソッドが、Goプログラムでコメントを抽出および処理するのを容易にします。

go/doc

パーサーがコード全体でTODO(joe)のようなスタイライズされた注釈をよりよく追跡するようになり、godoc コマンドが-notesフラグの値に応じて情報をフィルタリングまたは表示できます。

html/template

文書化されていない部分的に実装された「noescape」機能が削除されました。それに依存するプログラムは壊れます。

image/jpeg

プログレッシブJPEGファイルを読み取り、いくつかのサブサンプリング構成を処理します。

io

1バイトずつ書き込む共通の機能をキャプチャするためにio.ByteWriter インターフェースをエクスポートします。また、データを提供せずにループしていることを示すために使用される新しいエラーErrNoProgress をエクスポートします。

log/syslog

OS固有のログ機能をよりよくサポートします。

math/big

Int 型には、JSON表現に変換するためのメソッドMarshalJSONUnmarshalJSON があります。また、Int は、Uint64SetUint64 を使用して、uint64に直接変換でき、RatFloat64SetFloat64 を使用してfloat64に同様に変換できます。

mime/multipart

出力をパッケージ化するために使用される境界セパレータを定義するためのWriter の新しいメソッドSetBoundary があります。Reader も、引用符付き印刷可能な部分を透過的にデコードし、そうする際にContent-Transfer-Encodingヘッダーを削除します。

net

ListenUnixgram 関数は、戻り値の型が変更されました。現在はUnixConn を返し、以前のUDPConn は明らかにGo 1.0の間違いでした。このAPI変更はバグを修正するため、Go 1の互換性ルールで許可されています。
net パッケージには、新しい型Dialer が追加され、Dial にオプションを提供します。
net パッケージは、ゾーン修飾子を持つリンクローカルIPv6アドレス(例: fe80::1%lo0)をサポートします。アドレス構造IPAddrUDPAddrTCPAddr は、新しいフィールドにゾーンを記録し、これらのアドレスの文字列形式を期待する関数(例: DialResolveIPAddrResolveUDPAddrResolveTCPAddr )は、ゾーン修飾形式を受け入れるようになりました。
net パッケージは、解決関数のスイートにLookupNS を追加しました。LookupNSはホスト名のNSレコード を返します。
net パッケージは、IPConnReadMsgIPWriteMsgIP )およびUDPConnReadMsgUDPWriteMsgUDP )にプロトコル固有のパケット読み書きメソッドを追加しました。これらは、パケットに関連付けられたアウトオブバンドデータにアクセスするためのPacketConnReadFromおよびWriteToメソッドの特殊バージョンです。
net パッケージは、接続の半分を閉じるためのメソッドをUnixConn に追加しました(CloseReadCloseWrite )、既存のTCPConn のメソッドと一致します。

net/http

ParseTime は、いくつかの一般的なHTTP時間形式を試して時間文字列を解析します。RequestPostFormValue メソッドは、FormValue と似ていますが、URLパラメータを無視します。CloseNotifier インターフェースは、クライアントが切断されたときにサーバーハンドラが発見するメカニズムを提供します。ServeMux型には、パスのハンドラにアクセスするためのHandler メソッドがありますが、実行はしません。Transportは、CancelRequest でフライト中のリクエストをキャンセルできるようになりました。最後に、Transportは、Response.Body が完全に消費される前に閉じられたときに、TCP接続をより積極的に閉じるようになりました。

net/mail

RFC 5322形式のメールアドレスをAddress 構造に解析するための新しい関数ParseAddressParseAddressList があります。

net/smtp

Client 型には、新しいメソッドHello があり、サーバーにHELOまたはEHLOメッセージを送信します。

net/textproto

先頭と末尾のスペースをASCIIのみでトリミングする新しい関数TrimBytesTrimString があります。新しいメソッドos.FileMode.IsRegular は、ファイルが通常のファイルかどうかを簡単に確認できます。

os/signal

新しい関数Stop があり、チャネルにさらなるシグナルを配信するのを停止します。

regexp

Regexp.Longest メソッドを通じてUnixオリジナルの最左最長一致をサポートし、Regexp.Split は正規表現で定義されたセパレータに基づいて文字列を分割します。

runtime/debug

メモリ使用量に関する3つの新しい関数があります。FreeOSMemory 関数はガベージコレクタの実行をトリガーし、未使用のメモリをオペレーティングシステムに返そうとします。ReadGCStats 関数はコレクタに関する統計を取得し、SetGCPercent はコレクタがどのくらい頻繁に実行されるかを制御するプログラム的な方法を提供し、完全に無効にすることもできます。

sort

新しい関数Reverse があります。sort.Sort の呼び出しの引数をReverseでラップすると、ソート順序が逆になります。

strings

TrimPrefixTrimSuffix という自明な特性を持つ2つの新しい関数があり、新しいメソッドReader.WriteTo が追加され、Reader 型がio.WriterTo インターフェースを実装するようになりました。

syscall

Fchflags 関数は、さまざまなBSD(Darwinを含む)でシグネチャが変更されました。現在は、最初のパラメータとして文字列ではなくintを取ります。このAPI変更はバグを修正するため、Go 1の互換性ルールで許可されています。

syscall

サポートされている各オペレーティングシステムの定数とシステムコールをより包括的にするための多くの更新も受けています。

testing

新しいAllocsPerRun 関数を使用して、テストとベンチマークでの割り当て統計の生成を自動化します。また、testing.BReportAllocs メソッドは、呼び出し元のベンチマークのメモリ割り当て統計の印刷を有効にします。また、BenchmarkResultAllocsPerOp メソッドも導入されています。また、-vコマンドラインフラグの状態をテストするための新しいVerbose 関数と、不適切なテストをスキップするためのtesting.B およびtesting.T の新しいSkip メソッドがあります。

text/template およびhtml/template

テンプレートがパイプラインの要素をグループ化するために括弧を使用できるようになり、複雑なパイプラインの構築が簡素化されました。また、新しいパーサーの一部として、Node インターフェースには、エラー報告を改善するための2つの新しいメソッドが追加されました。これはGo 1の互換性ルールに違反していますが、このインターフェースは明示的にtext/template およびhtml/template パッケージでのみ使用されることを意図しており、それを保証するための安全策があります。

unicode

Unicodeバージョン6.2.0に更新されました。

unicode/utf8

新しい関数ValidRune が、ルーンが有効なUnicodeコードポイントであるかどうかを報告します。有効であるためには、ルーンは範囲内であり、サロゲートハーフであってはなりません。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア