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

JavaScriptを有効にしてください

前書き

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

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

Go 1.6の紹介

最新のGoリリースであるバージョン1.6は、1.5の6か月後に登場しました。変更のほとんどは、言語、ランタイム、およびライブラリの実装にあります。言語仕様には変更はありません。リリースは常にGo 1の互換性の約束 を維持しています。ほとんどすべてのGoプログラムがこれまで通りにコンパイルおよび実行されることを期待しています。

このリリースでは、64ビットMIPS上のLinuxと32ビットx86上のAndroid への新しいポートが追加されました。GoポインタをCと共有するためのルールを定義し、強制 しました。HTTP/2の透過的で自動的なサポート が追加され、テンプレートの再利用 のための新しいメカニズムが導入されました。

言語の変更

このリリースには言語の変更はありません。

ポート

Go 1.6は、64ビットMIPS上のLinux(linux/mips64およびlinux/mips64le)への実験的なポートを追加しました。これらのポートはcgoをサポートしていますが、内部リンクのみです。Go 1.6はまた、32ビットx86上のAndroid(android/386)への実験的なポートを追加しました。FreeBSDでは、Go 1.6は外部Cコンパイラとしてgccではなくclangをデフォルトで使用します。リトルエンディアンの64ビットPowerPC上のLinux(linux/ppc64le)では、Go 1.6は外部リンクを使用したcgoをサポートし、ほぼ機能が完了しています。NaClでは、Go 1.5はSDKバージョンpepper-41を必要としていましたが、Go 1.6は後のSDKバージョンをサポートしています。32ビットx86システムで-dynlinkまたは-sharedコンパイルモードを使用する場合、レジスタCXは特定のメモリ参照によって上書きされるため、手書きのアセンブリでは避けるべきです。詳細はアセンブリドキュメント を参照してください。

ツール

Cgo

cgo には1つの大きな変更と1つの小さな変更があります。大きな変更は、GoポインタをCコードと共有するためのルールの定義であり、そのようなCコードがGoのガベージコレクタと共存できるようにすることです。簡単に言えば、GoとCは、cgo呼び出しの一部としてCに渡されるメモリへのポインタがある場合、Goによって割り当てられたメモリを共有できます。ただし、そのメモリ自体にGoによって割り当てられたメモリへのポインタが含まれていないこと、およびCが呼び出しが戻った後にポインタを保持しないことが条件です。これらのルールはプログラム実行中にランタイムによってチェックされます。ランタイムが違反を検出すると、診断を出力してプログラムをクラッシュさせます。チェックは環境変数GODEBUG=cgocheck=0を設定することで無効にできますが、チェックによって識別されたコードの大部分は、何らかの形でガベージコレクションと微妙に互換性がありません。チェックを無効にすると、通常はより神秘的な失敗モードにつながるだけです。チェックをオフにするよりも、問題のコードを修正することを強くお勧めします。詳細はcgoドキュメント を参照してください。小さな変更は、Goのcomplex64およびcomplex128とは別に、明示的なC.complexfloatおよびC.complexdouble型が追加されたことです。他の数値型と一致して、Cの複素数型とGoの複素数型はもはや互換性がありません。

コンパイラツールチェーン

コンパイラツールチェーンはほとんど変更されていません。内部的には、最も重要な変更は、パーサーがyacc から生成されたものではなく、手書きになったことです。コンパイラ、リンカ、およびgoコマンドには新しいフラグ-msanが追加されました。これは-raceに類似しており、linux/amd64でのみ利用可能で、Clang MemorySanitizer との相互運用を可能にします。このような相互運用は、主に疑わしいCまたはC++コードを含むプログラムのテストに役立ちます。リンカには新しいオプション-libgccがあり、cgo コードをリンクする際にCコンパイラサポートライブラリの予想される場所を設定します。このオプションは-linkmode=internalを使用する場合にのみ参照され、サポートライブラリの使用を無効にするためにnoneに設定することができます。Go 1.5で開始されたビルドモードの実装 は、より多くのシステムに拡張されました。このリリースでは、android/386android/amd64android/arm64linux/386、およびlinux/arm64でのc-sharedモードのサポートが追加されました。linux/386linux/armlinux/amd64、およびlinux/ppc64leでのsharedモードのサポートが追加されました。また、新しいpieモード(位置独立実行ファイルの生成)のサポートがandroid/386android/amd64android/armandroid/arm64linux/386linux/amd64linux/armlinux/arm64、およびlinux/ppc64leで追加されました。詳細は設計ドキュメント を参照してください。リマインダーとして、リンカの-XフラグはGo 1.5で変更されました。Go 1.4以前では、-Xは2つの引数を取りました。例:

bash
1
-X importpath.name value

Go 1.5では、1つの引数を使用する代替構文が追加されました。これはname=valueペア自体です:

bash
1
-X importpath.name=value

Go 1.5では、新しい構文の使用を提案する警告を表示した後、古い構文もまだ受け入れられていました。Go 1.6は古い構文を受け入れ、警告を表示し続けます。Go 1.7では古い構文のサポートが削除されます。

Gccgo

GCCとGoプロジェクトのリリーススケジュールは一致していません。GCCリリース5にはGo 1.4バージョンのgccgoが含まれています。次のリリースであるGCC 6にはGo 1.6.1バージョンのgccgoが含まれます。

Goコマンド

go コマンドの基本的な操作は変更されていませんが、注目すべき変更がいくつかあります。Go 1.5では、GO15VENDOREXPERIMENT環境変数を1に設定することで、ベンダリングの実験的サポートが導入されました。Go 1.6では、ベンダリングサポートが実験的と見なされなくなり、デフォルトで有効になっています。GO15VENDOREXPERIMENT環境変数を0に設定することで明示的に無効にすることができます。Go 1.7では環境変数のサポートが削除されます。デフォルトでベンダリングを有効にすることによって引き起こされる最も可能性の高い問題は、新しいベンダリングのセマンティクスに従って解釈されることを期待していない既存のvendorという名前のディレクトリを含むソースツリーで発生します。この場合、最も簡単な修正は、ディレクトリの名前をvendor以外の何かに変更し、影響を受けるインポートパスを更新することです。ベンダリングの詳細については、goコマンドのドキュメント および設計ドキュメント を参照してください。新しいビルドフラグ-msanが追加され、LLVMメモリサニタイザのサポートを持つGoをコンパイルします。これは主に、メモリサニタイザでチェックされているCまたはC++コードとリンクする場合に使用されます。

Go docコマンド

Go 1.5では、go doc コマンドが導入され、パッケージ名のみを使用してパッケージを参照できるようになりました。例:

bash
1
go doc http

曖昧さがある場合、Go 1.5の動作は、辞書順で最も早いインポートパスを持つパッケージを使用することでした。Go 1.6では、曖昧さは要素が少ないインポートパスを優先することで解決され、辞書順比較でタイを解決します。この変更の重要な効果は、オリジナルのパッケージがベンダリングされたコピーよりも優先されることです。成功した検索も通常より速く実行されます。

Go vetコマンド

go vet コマンドは、Printfに関数またはメソッドの値を引数として渡すことを診断するようになりました。例えば、f()が意図されていた場合にfを渡すといったケースです。

パフォーマンス

常にそうであるように、変更は非常に一般的で多様であるため、パフォーマンスに関する正確な声明を行うことは困難です。いくつかのプログラムは速く実行されるかもしれませんし、遅くなるかもしれません。平均して、Go 1ベンチマークスイートのプログラムは、Go 1.5よりもGo 1.6で数パーセント速く実行されます。ガベージコレクタの停止は、特に大量のメモリを使用するプログラムにおいて、Go 1.5よりもさらに低くなっています。10%以上の改善をもたらす重要な最適化が、compress/bzip2compress/gzipcrypto/aescrypto/ellipticcrypto/ecdsa 、およびsort パッケージの実装に行われました。

標準ライブラリ

HTTP/2

Go 1.6は、net/http パッケージに新しいHTTP/2プロトコル の透過的なサポートを追加しました。Goクライアントとサーバーは、HTTPSを使用する際に適切にHTTP/2を自動的に使用します。HTTP/2プロトコル処理の詳細に特化した公開APIはありません。HTTP/1.1に特化した公開APIがないのと同様です。HTTP/2を無効にする必要があるプログラムは、Transport.TLSNextProto (クライアント用)またはServer.TLSNextProto (サーバー用)を非nilの空のマップに設定することで無効にできます。HTTP/2プロトコル固有の詳細を調整する必要があるプログラムは、golang.org/x/net/http2 をインポートして使用できます。特にそのConfigureServer およびConfigureTransport 関数を使用します。

ランタイム

ランタイムには、マップの同時誤用を軽量で最善の努力で検出する機能が追加されました。常にそうであるように、1つのゴルーチンがマップに書き込んでいる場合、他のゴルーチンはそのマップを同時に読み書きしてはいけません。ランタイムがこの条件を検出すると、診断を出力してプログラムをクラッシュさせます。問題についてもっと知るための最良の方法は、プログラムをレースデテクタ の下で実行することです。これにより、レースがより確実に特定され、詳細が提供されます。プログラム終了のパニックの場合、ランタイムはデフォルトで実行中のゴルーチンのスタックのみを出力し、既存のすべてのゴルーチンを出力しません。通常、パニックに関連するのは現在のゴルーチンだけであるため、他のものを省略することでクラッシュメッセージの無関係な出力が大幅に減少します。クラッシュメッセージで全ゴルーチンのスタックを表示するには、環境変数GOTRACEBACKallに設定するか、クラッシュ前にdebug.SetTraceback を呼び出し、プログラムを再実行します。詳細はランタイムドキュメント を参照してください。更新:プログラム全体の状態をダンプすることを意図したキャッチされないパニック、例えばタイムアウトが検出された場合や受信したシグナルを明示的に処理する場合は、パニックする前にdebug.SetTraceback("all")を呼び出す必要があります。signal.Notify の使用を検索することで、そのようなコードを特定するのに役立つかもしれません。Windowsでは、Go 1.5およびそれ以前のGoプログラムは、timeBeginPeriod(1)を呼び出すことで、起動時にグローバルなWindowsタイマー解像度を1msに強制していました。Goはもはやスケジューラのパフォーマンスを向上させるためにこれを必要とせず、グローバルなタイマー解像度の変更は一部のシステムで問題を引き起こしたため、この呼び出しは削除されました。-buildmode=c-archiveまたは-buildmode=c-sharedを使用してアーカイブまたは共有ライブラリをビルドする場合、シグナルの処理が変更されました。Go 1.5では、アーカイブまたは共有ライブラリはほとんどのシグナルに対してシグナルハンドラをインストールしていました。Go 1.6では、Goコード内のランタイムパニックを処理するために必要な同期シグナル、すなわちSIGBUSSIGFPESIGSEGVに対してのみシグナルハンドラをインストールします。詳細はos/signal パッケージを参照してください。

リフレクト

reflect パッケージは、エクスポートされたフィールドを含む非エクスポートされた構造体型を埋め込むことに関するgcgccgoツールチェーン間の長年の非互換性を解決しました 。特にencoding/jsonencoding/xml パッケージの精神でシリアル化を実装するために、リフレクションを使用してデータ構造を歩くコードは更新が必要になるかもしれません。この問題は、リフレクションを使用して、非エクスポートされた構造体型フィールドを通じて、その構造体のエクスポートされたフィールドにアクセスする場合に発生します。この場合、reflectは埋め込まれたフィールドをエクスポートされたものとして誤って報告し、空のField.PkgPathを返していました。現在は、フィールドを非エクスポートとして正しく報告しますが、構造体内に含まれるエクスポートされたフィールドへのアクセスを評価する際にはその事実を無視します。更新:通常、以前に構造体を歩いてf.PkgPath != ""を使用してアクセスできないフィールドを除外していたコードは、現在はf.PkgPath != "" && !f.Anonymousを使用する必要があります。例えば、encoding/json およびencoding/xml の実装への変更を参照してください。

ソート

sort パッケージでは、Sort の実装が書き直され、InterfaceLessおよびSwapメソッドへの呼び出しが約10%減少し、対応する全体的な時間節約が得られました。新しいアルゴリズムは、Less(i, j)およびLess(j, i)が偽であるペアに対して、以前とは異なる順序を選択します。更新:Sortの定義は、等しい値の最終的な順序について保証を行いませんが、新しい動作は特定の順序を期待するプログラムを壊す可能性があります。そのようなプログラムは、望ましい順序を報告するためにLessの実装を改善するか、等しい値の元の入力順序を保持するStable に切り替えるべきです。

テンプレート

text/template パッケージには、テンプレートの記述を容易にするための2つの重要な新機能があります。まず、テンプレートアクションの周囲のスペースをトリムする ことが可能になり、テンプレート定義がより読みやすくなります。アクションの先頭にマイナス記号を付けると、アクションの前のスペースがトリムされ、アクションの末尾にマイナス記号を付けると、アクションの後のスペースがトリムされます。例えば、テンプレート

go
1
2
3
{{23 -}}
   <
{{- 45}}

23<45としてフォーマットされます。第二に、新しい{{block}}アクション と名前付きテンプレートの再定義を許可することで、異なるインスタンスで置き換えることができるテンプレートの部分を定義する簡単な方法が提供されます。text/templateパッケージの例 がこの新機能を示しています。

ライブラリの小さな変更

archive/tar

ファイル形式のまれなコーナーケースで多くのバグを修正しました。目に見える変更の1つは、Reader 型のRead メソッドが、特殊ファイルタイプの内容を空として提示し、即座にio.EOFを返すようになったことです。

archive/zip

Reader 型にRegisterDecompressor メソッドが追加され、Writer 型にRegisterCompressor メソッドが追加され、個々のzipファイルの圧縮オプションを制御できるようになりました。これらは、既存のグローバルなRegisterDecompressor およびRegisterCompressor 関数よりも優先されます。

bufio

Scanner 型には、スキャン中に使用する初期バッファと最大バッファサイズを指定するためのBuffer メソッドが追加されました。これにより、必要に応じて、MaxScanTokenSizeより大きなトークンをスキャンすることが可能になります。また、スキャナ用に、パッケージはErrFinalToken エラー値を定義し、分割関数 が処理を中止したり、最終的な空のトークンを返したりするために使用します。

compress/flate

ReadError およびWriteError エラー実装を非推奨としました。Go 1.5では、エラーが発生した場合にのみまれに返されていましたが、現在は決して返されませんが、互換性のために定義されたままです。compress/flatecompress/gzip 、およびcompress/zlib パッケージは、切り捨てられた入力ストリームに対してio.ErrUnexpectedEOF を報告し、io.EOF ではなくなりました。

crypto/cipher

GCM復号化の失敗時に宛先バッファを上書きするようになりました。これは、AESNIコードが一時バッファを使用しないようにするためです。

crypto/tls

ConfignilCertificatesを持っている場合でも、GetCertificateコールバックが設定されている限り、Listen が成功するようになりました。RSAとAES-GCM暗号スイートのサポートが追加され、RecordHeaderError が追加され、クライアント(特にnet/http パッケージ)が非TLSサーバーへのTLS接続を試みる際により良いエラーを報告できるようになりました。

crypto/x509

負のシリアル番号を含む証明書を許可するようになりました(技術的にはエラーですが、残念ながら一般的です)。また、MD5のような安全でないアルゴリズムで署名された証明書を拒否する際に、より良いエラーメッセージを提供するために、新しいInsecureAlgorithmError を定義しています。

debug/dwarf およびdebug/elf

圧縮されたDWARFセクションのサポートを追加しました。ユーザーコードは更新を必要としません:セクションは読み取り時に自動的に解凍されます。

debug/elf

一般的な圧縮ELFセクションのサポートを追加しました。ユーザーコードは更新を必要としません:セクションは読み取り時に自動的に解凍されます。ただし、圧縮されたSections はランダムアクセスをサポートしていません:それらはnilReaderAtフィールドを持っています。

encoding/asn1

ASN.1構造の高度な解析に役立つtagおよびclass定数 をエクスポートするようになりました。また、encoding/asn1 パッケージでは、Unmarshal がさまざまな非標準の整数および長さのエンコーディングを拒否するようになりました。

encoding/base64

Decoder は、その入力の最終バイトを処理するように修正されました。以前は、可能な限り多くの4バイトトークンを処理しましたが、残りの最大3バイトを無視していました。したがって、デコーダーは未パディングのエンコーディング(RawURLEncoding など)の入力を正しく処理しますが、切り捨てられた入力や無効なバイトで終了するパディングされたエンコーディングの入力も拒否します。例えば、末尾のスペースなどです。

encoding/json

Number の構文をマシュールする前にチェックし、数値値のJSON仕様に準拠していることを要求するようになりました。以前のリリースと同様に、ゼロのNumber(空の文字列)はリテラルの0(ゼロ)としてマシュールされます。

encoding/xml

Marshal 関数は、引数を1つ以上の<cdata>タグでエンコードするcdata属性をサポートするようになりました。また、encoding/xml パッケージでは、DecoderToken メソッドが、すべての開いているタグが閉じられる前にEOFに遭遇した場合にエラーを報告するようになり、入力のタグが適切に一致するという一般的な要件と一致しています。その要件を回避するには、RawToken を使用してください。

fmt

Printf*幅および精度指定の引数として任意の整数型を許可するようになりました。以前のリリースでは、*の引数はint型である必要がありました。また、fmt パッケージでは、Scanf%Xを使用して16進文字列をスキャンできるようになり、%xのエイリアスとして機能します。両方のフォーマットは、大文字と小文字の16進数の任意の組み合わせを受け入れます。

image およびimage/color

非プリマルチプライドアルファを持つY’CbCr画像をサポートするためにNYCbCrA およびNYCbCrA 型を追加しました。

io

MultiWriter 実装は、WriteString で使用するためのWriteStringメソッドを実装するようになりました。

math/big

IntAppend およびText メソッドを追加し、印刷に関するより多くの制御を提供します。また、math/big パッケージでは、Floatencoding.TextMarshaler およびencoding.TextUnmarshaler を実装し、encoding/json およびencoding/xml パッケージによって自然な形式でシリアル化できるようになりました。また、math/big パッケージでは、FloatAppend メソッドが特別な精度引数-1をサポートするようになりました。strconv.ParseFloat と同様に、精度-1は、同じ精度のFloatに結果を読み込むParseが元の値を生成するのに必要な最小の桁数を使用することを意味します。

math/rand

Read 関数を追加し、同様にRandRead メソッドを追加しました。これにより、疑似ランダムなテストデータを生成することが容易になります。パッケージの他の部分と同様に、これらは暗号化設定では使用しないでください。そのような目的には、crypto/rand パッケージを使用してください。

net

ParseMAC 関数は、20バイトのIP-over-InfiniBand(IPoIB)リンク層アドレスを受け入れるようになりました。また、net パッケージでは、DNSルックアップにいくつかの変更があります。まず、DNSError エラー実装がError を実装し、特にその新しいIsTemporary メソッドがDNSサーバーエラーに対してtrueを返すようになりました。第二に、LookupAddr などのDNSルックアップ関数は、Plan 9およびWindowsでルート付きドメイン名(末尾にドット付き)を返すようになり、Unixシステム上のGoの動作と一致します。

net/http

すでに議論したHTTP/2サポート以外にもいくつかの小さな追加があります。まず、FileServer は、生成されたディレクトリリストをファイル名でソートするようになりました。第二に、ServeFile 関数は、リクエストのURLパスに「..」(ドットドット)がパス要素として含まれている場合、結果を提供することを拒否するようになりました。プログラムは通常、ServeFileを直接呼び出す代わりに、FileServerおよびDir を使用する必要があります。URLにドットドットを含むリクエストに応じてファイルコンテンツを提供する必要があるプログラムは、ServeContent を呼び出すことができます。第三に、Client は、ユーザーコードがExpect: 100-continueヘッダーを設定できるようになりました(Transport.ExpectContinueTimeout を参照)。第四に、5つの新しいエラーコード があります:StatusPreconditionRequired(428)、StatusTooManyRequests(429)、StatusRequestHeaderFieldsTooLarge(431)、およびRFC 6585からのStatusNetworkAuthenticationRequired(511)、および最近承認されたStatusUnavailableForLegalReasons(451)。第五に、CloseNotifier の実装とドキュメントが大幅に変更されました。Hijacker インターフェースは、以前にCloseNotifierで使用された接続で正しく動作するようになりました。ドキュメントは、CloseNotifierが期待される動作を説明しています。また、net/http パッケージでは、Request データ構造のMethodフィールドが空の文字列に設定されている場合の処理に関連するいくつかの変更があります。空のMethodフィールドは常に"GET"のエイリアスとして文書化されており、そのままです。ただし、Go 1.6では、空のMethodを明示的な"GET"と同じように扱わなかったいくつかのルーチンが修正されました。特に、以前のリリースでは、Client は、Methodが明示的に"GET"に設定されている場合にのみリダイレクトをフォローしていました。Go 1.6では、Clientは空のMethodでもリダイレクトをフォローします。最後に、NewRequest は、空であることが許可されていると文書化されていないmethod引数を受け入れます。過去のリリースでは、空のmethod引数を渡すと、空のMethodフィールドを持つRequestが生成されました。Go 1.6では、生成されるRequestは常に初期化されたMethodフィールドを持ちます:引数が空の文字列の場合、NewRequestは返されるRequestMethodフィールドを"GET"に設定します。

net/http/httptest

ResponseRecorder は、http.Server と同じコンテンツスニッフィングアルゴリズムを使用してデフォルトのContent-Typeヘッダーを初期化するようになりました。

net/url

Parse は、ホスト名の解析に関してより厳格で仕様に準拠するようになりました。例えば、ホスト名にスペースが含まれている場合はもはや受け入れられません。また、net/url パッケージでは、Error 型がnet.Error を実装するようになりました。

os

IsExistIsNotExist 、およびIsPermission は、SyscallError について問い合わせる際に正しい結果を返すようになりました。Unixライクなシステムでは、os.Stdoutまたはos.Stderr (より正確には、ファイルディスクリプタ1または2のために開かれたos.File)への書き込みが壊れたパイプエラーのために失敗した場合、プログラムはSIGPIPEシグナルを発生させます。デフォルトでは、これによりプログラムが終了します。これは、syscall.SIGPIPEのためにos/signalNotify 関数を呼び出すことで変更できます。ファイルディスクリプタ1または2以外の壊れたパイプへの書き込みは、単にsyscall.EPIPE(おそらくos.PathError および/またはos.SyscallError でラップされて)を呼び出し元に返します。壊れたパイプへの10回連続の書き込み後にキャッチできないSIGPIPEシグナルを発生させるという古い動作はもはや発生しません。

os/exec

CmdOutput メソッドは、コマンドが不成功のステータスで終了した場合にExitError を返し続けます。標準エラーが他の方法で破棄される場合、返されるExitErrorは、失敗したコマンドの標準エラー出力のプレフィックスとサフィックス(現在32 kB)を保持し、デバッグやエラーメッセージへの含めに使用します。ExitErrorString メソッドは、キャプチャされた標準エラーを表示しません。プログラムはデータ構造からそれを別途取得する必要があります。

path/filepath

Windowsでは、Join 関数が、ベースが相対ドライブパスである場合を正しく処理するようになりました。例えば、Join('c:', 'a')は、過去のリリースのようにc:\aではなくc:aを返します。これは、誤った結果を期待するコードに影響を与える可能性があります。

regexp

Regexp 型は常に同時ゴルーチンによる使用に安全でした。それは、正規表現検索中に使用されるスクラッチスペースのキャッシュを保護するためにsync.Mutex を使用します。同じRegexpを多くのゴルーチンから使用する高並列サーバーの一部は、そのミューテックスの競合によるパフォーマンスの低下を経験しました。そのようなサーバーを支援するために、RegexpにはCopy メソッドが追加されました。これは、元の構造の大部分を共有するが独自のスクラッチスペースキャッシュを持つRegexpのコピーを作成します。2つのゴルーチンは、ミューテックスの競合なしに異なるRegexpのコピーを使用できます。コピーには追加のスペースオーバーヘッドがありますので、競合が観察された場合にのみCopyを使用するべきです。

strconv

IsGraphic を追加し、IsPrint に類似しています。また、QuoteToGraphicQuoteRuneToGraphicAppendQuoteToGraphic 、およびAppendQuoteRuneToGraphic を追加し、QuoteToASCIIQuoteRuneToASCII などに類似しています。ASCIIファミリーは、ASCIIスペース(U+0020)を除くすべてのスペース文字をエスケープします。対照的に、グラフィックファミリーは、Unicodeスペース文字(カテゴリZs)をエスケープしません。testing パッケージでは、テストがt.Parallelを呼び出すと、そのテストはすべての非並列テストが完了するまで一時停止され、その後、すべての他の並列テストとともに実行を続行します。Go 1.6は、そのようなテストの報告時間を変更しました:以前は並列実行のみをカウントしていましたが、現在はテストの開始からt.Parallelの呼び出しまでの時間もカウントします。

text/template

上記の主要な変更 に加えて、2つの小さな変更があります。まず、新しいExecError 型が追加され、Execute 中に発生するエラーで、基礎となるライターへの書き込みに起因しないものが返されます。呼び出し元は、テンプレート使用エラーとI/Oエラーを区別するためにExecErrorをチェックできます。第二に、Funcs メソッドは、FuncMap でキーとして使用される名前がテンプレート関数呼び出しに現れることができる識別子であることを確認するようになりました。そうでない場合、Funcsはパニックを起こします。

time

Parse 関数は、常に31を超える月の日を拒否していました。例えば、1月32日などです。Go 1.6では、Parseは非閏年の2月29日、2月30日、2月31日、4月31日、6月31日、9月31日、および11月31日も拒否するようになりました。


スポンサーリンク

共有

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