Help us understand the problem. What is going on with this article?

Go 1.15 リリースノート 日本語訳

この記事は https://golang.org/doc/go1.15 を日本語訳したものです. 前のバージョンはこちら: Go 1.14 リリースノート 日本語訳

Go 1.15 の紹介

最新の Go リリース、バージョン 1.15 は、Go 1.14 から6か月後に届きます. その変更点のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装になります. いつものように、このリリースは Go 1 の互換性の約束を守っています. 私たちは、ほとんどすべての Go プログラムが以前と同じようにコンパイルし実行し続けれると予想しています.

Go 1.15 には、リンカの大幅な改良多 CPU コア数での小さなオブジェクトの割り当ての改善、X.509 CommonName の廃止が含まれています. GOPROXY はエラーを返すプロキシのスキップをサポートし、新しい埋め込み tzdata パッケージが追加されました。

言語への変更

言語の変更はありません.

ポート

Darwin

Go 1.14 のリリースノートでアナウンスしたように、Go 1.15 は macOS 10.12 Sierra 以降を必要とし、以前のバージョンのサポートは終了となります.

Go 1.14 のリリースノートでアナウンスしたように、Go 1.15 は macOS、iOS、iPadOS, watchOS、tvOS 上の32ビットバイナリ(darwin/386darwin/arm のポート)のサポートを終了します. Go は64ビットの darwin/amd64darwin/arm64 のサポートは継続します.

Windows

Go は -buildmode=pie cmd/link フラグが指定されたときに Windows ASLR 実行ファイルを生成するようになりました, Windows では、Go コマンドはデフォルトで -buildmode=pie を使用します.

-race-msan フラグは、unsafe.Pointer の使用をチェックする -d=checkptr を常に有効とするようになりました. これは以前から Windows を除く全ての OS でそうでした.

Go で作られた DLL は、シグナル(ターミナルでの Ctrl-C など)を受け取ったときにプロセスを終了させないようになりました.

Android

Android 用のバイナリをリンクする際に、Go 1.15 は最近のバージョンの NDK で利用可能な lld リンカを明示的に選択します. lld リンカは一部のデバイスでのクラッシュを回避し、将来の NDK バージョンではデフォルトのNDK リンカになる予定です.

OpenBSD

Go 1.15 は GOARCH=armGOARCH=arm64 での OpenBSD 6.7 のサポートを追加します. 以前のバージョンの Go では、すでに GOARCH=386GOARCH=amd64 での OpenBSD 6.7 をサポートしています.

RISC-V

Linux 上の 64 ビット RISC-V ポート(GOOS=linux, GOARCH=riscv64)の安定性と性能の向上に進展がありました. また、非同期のプリエンプションもサポートするようになりました.

386

Go 1.15 は x87 浮動小数点数のみを持つハードウェア(GO386=387)をサポートする最後のリリースとなります. 今後のリリースでは 386 では少なくとも SSE2 をサポートすることが要求されるようになり、Go の GOARCH=386 の最小要件は Intel Pentium 4 (2000年リリース) または AMD Opteron/Athlon 64 (2003年リリース) に引き上げられます.

ツール

Go コマンド

GOPROXY 環境変数はエラーを返すプロキシのスキップをサポートしました. プロキシ URL はカンマ (,) かパイプ文字 (|) で区切ることができるようになりました. もしプロキシ URL がカンマに続いている場合、go コマンドは 404 か 410 HTTP レスポンスの場合にのみリストの次のプロキシを試します. もしプロキシ URL がパイプ文字に続いている場合、go コマンドはどんなエラーでもリストの次のプロキシを試します. GOPROXY のデフォルト値は、エラーのときに direct にフォールバックしない https://proxy.golang.org,direct のままであることに注意してください.

go test

-timeout フラグの変更がキャッシュされたテスト結果を無効化するようになりました. 長いタイムアウトで実行したテストの結果のキャッシュが、短いタイムアウトで go test を再実行した時にパスとしてカウントされることはもう有りません.

フラグ解析

go testgo vet の様々なフラグ解析の問題が修正されました. 特に GOFLAGS の中で指定されたフラグはより一貫性があるように扱われるようになり、-outputdir フラグは (個々のテストの作業ディレクトリではなく) go コマンドの作業ディレクトリと解釈されるようになりました.

モジュールキャッシュ

モジュールキャッシュの場所は GOMODCACHE 環境変数で設定できるようになりました. GOMODCACHE のデフォルト値は、この変更が入る前からモジュールがキャッシュされていた場所である GOPATH[0]/pkg/mod です.

外部プログラムがファイルシステムを同時にスキャンすることで発生する、モジュールキャッシュにアクセスする go コマンドで "Access is denied" エラーが発生する Windows 向けのワークアラウンドが利用可能になりました(issue #36568を見てください). 1.14.2 及び 1.13.10 未満の Go バージョンが同じモジュールキャッシュで同時に実行される時に使用すると安全ではないため、このワークアラウンドはデフォルトでは有効となっていません. 環境変数に GODEBUG=modcacheunzipinplace=1 を明示的に設定することにより、有効にできます.

Vet

string(x) への新しい警告

vet ツールは,xrune もしくは byte 以外の整数型を持つ string(x) 形式の変換について警告するようになりました. Go での経験から、この形式の変換の多くは、string(x) が整数 x の文字列表現に評価されると誤って想定していることが分かっています. 実際には、x の値の UTF-8 エンコーディングを含む文字列として評価されます. 例えば、string(9786) は文字列 "9786" に評価されるのではなく、文字列 "\xe2\x98\xba" もしくは "☺" に評価されます。

string(x) を正しく使用しているコードは、string(rune(x)) に書き換えることが可能です. あるいは、いくつかのケースでは、適切なバイトスライス bufutf8.EncodeRune(buf, x) を呼び出すことが正しい解決策かもしれません. 他のコードでは strconv.Itoafmt.Sprint を使用しなければならないでしょう.

この新しい vet チェックは、go test を使用するときにデフォルトで有効になっています.

私たちは、Go の将来のリリースでこの変換を禁止することを検討しています. つまり、x の型が runebyte である整数 x に対してのみ string(x) が許されるように言語が変更されます. そのような言語の変更は後方互換性がありません. 私達は言語を変更するための最初の試験的なステップとして、この vet チェックを使用しています.

不可能なインターフェース変換への新しい警告

あるインターフェイス型から別のインターフェイス型への常に失敗する型アサーションについて、vet ツールは警告するようになりました. これは両方のインターフェース型が違う型シグネチャの同じ名前のメソッドを実装している場合に発生します.

常に失敗する型アサーションを書く理由はないので、この vet チェックを引き起こすコードはすべて書き換えるべきです.

この新しい vet チェックは、go test を使用するときにデフォルトで有効になっています.

Go の将来のリリースでは、不可能なインターフェイスの型アサーションを禁止することを検討しています. そのような言語の変更は後方互換性がありません. 私達は言語を変更するための最初の試験的なステップとして、この vet チェックを使用しています.

ランタイム

bool, complex64, complex128, float32, float64, int, int8, int16, int32, int64, string, uint, uint8, uint16, uint32, uint64, uintptr の派生型の値で panic を発生させた場合、そのアドレスの代わりに値が表示されるようになりました. 以前は正確にこれらの型の値の場合にのみ値が表示されていました.

Unix システム上で、kill コマンドまたは kill システムコールが SIGSEGVSIGBUSSIGFPE シグナルを Go プログラムに送信するために使用され、そのシグナルが os/signal.Notify でハンドルされていない場合、Go プログラムは確実にスタックトレース有りでクラッシュするようになりました. 以前のリリースでは、挙動が予測不可能でした.

スモールオブジェクトの割り当ては、コア数が多い場合のパフォーマンスがずっと良くなり、ワーストケースのレイテンシもより低くなりました.

小さな整数値をインターフェイス値に変換してもアロケーションが発生しなくなりました.

閉じたチャンネルでのノンブロッキング受信が、開いているチャンネルでのノンブロッキング受信と同じ動作をするようになりました.

コンパイラ

パッケージ unsafe安全規則 は特定の関数を呼び出す際に unsafe.Pointeruintptr に変換することを許しています. 以前は、いくつかのケースで、コンパイラは複数の連鎖変換を許可していました(例えば、syscall.Syscall(…, uintptr(uintptr(ptr)), …)). コンパイラは今や正確に1つの変換であることを求めます. 複数の変換を使用していたコードは、安全規則を満たすように更新する必要があります.

Go 1.15 では、特定のタイプの GC メタデータを削除し、未使用の型メタデータをより積極的に削除することで、典型的なバイナリサイズを Go 1.14 と比較して約5%削減しました.

ツールチェーンは、関数を32バイト境界に揃え、ジャンプ命令をパディングすることによって、GOARCH=amd64 上で Intel CPU erratum SKX102 を緩和するようになりました. このパディングによりバイナリサイズが増加しますが、上述のバイナリサイズの改善により埋め合わせています.

Go 1.15 では、コンパイラとアセンブラの両方に -spectre フラグが追加され、Spectre の緩和が有効にできるようになりました. これらはほとんど必要ないはずですが、主に "defense in depth" メカニズムとして提供されています. 詳細については Spectre wiki page を参照してください。

コンパイラは、それらが適用される宣言にとって意味のない //go: コンパイラディレクティブを、"misplaced compiler directive" エラーとして拒否するようになりました. そのような誤って適用されたディレクティブは以前から壊れていましたが、コンパイラによって無言で無視されていました.

コンパイラの -json 最適化ロギングは、大きな (128バイト以上) コピーを報告するようになり、エスケープ解析の判断の説明を含むようになりました.

リンカ

このリリースには、リンカのリソース使用量(時間とメモリの両方)を削減し、コードの堅牢性/保守性を向上させる、Go リンカへの大幅な改良が含まれています.

大規模な Go プログラムの代表的なセットでは、amd64 アーキテクチャ上で動作する ELF ベースの OS (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly, および Solaris) の場合、リンクは 20% 高速化され、必要とするメモリは平均で 30% 少なくなり、他のアーキテクチャ/OSの組み合わせではもう少し控えめな改善となります.

リンカの性能向上の主要因は、新しく再設計されたオブジェクトファイル形式や、同時実行性を高めるための内部フェーズの見直しです(例えば、シンボルへの再配置を並行して適用する). Go 1.15 のオブジェクトファイルは、1.14 のものよりも若干大きくなっています.

これらの変更は Go リンカの近代化 のためのマルチリリースプロジェクトの一部であり、将来のリリースではさらなるリンカの改良が期待できます.

リンカは linux/amd64linux/arm64 で内部リンクモードとして -buildmode=pie をデフォルトとしたので、これらの構成では C リンカを必要としなくなりました. 外部リンクモード(Go 1.14では -buildmode=pie がデフォルトでした)は、-ldflags=-linkmode=external フラグを使って引き続き要求することができます.

Objdump

objdump ツールは -gnu フラグで、GNU アセンブラ構文での逆アセンブルをサポートするようになりました.

コアライブラリ

新しい tzdata 埋め込みパッケージ

Go 1.15 には、タイムゾーンデータベースをプログラムに埋め込むことができる新しいパッケージ、time/tzdata が含まれています. (import _ "time/tzdata" のように)このパッケージをインポートすると、ローカルシステム上にタイムゾーンデータベースがない場合でも、プログラムがタイムゾーン情報を見つけることができます. -tags timetzdata を付けてビルドすることによってでもタイムゾーンデータベースを埋め込むことができます. どちらのやり方でも、プログラムのサイズは約 800KB 増加します.

Cgo

Go 1.15 では、C言語型の EGLConfig が Go 言語型の uintptr に変換されます. この変更は Go 1.12 以降の EGLDisplay や Darwin の CoreFoundation や Java の JNI 型の扱い方に似ています. 詳細は cgo のドキュメント を参照してください.

X.509 CommonName の廃止

Subject Alternative Names が存在しない場合、X.509 証明書の CommonName フィールドをホスト名として扱うという非推奨でレガシーな挙動がデフォルトで無効になりました. GODEBUG 環境変数に x509ignoreCN=0 の値を追加することで、一時的に再度有効にすることが可能です.

GODEBUG の設定に関わらず CommonName が無効なホスト名の場合、常に無視されることに注意してください. 無効な名前には英字、数字、ハイフン、アンダースコア以外の文字や空のラベルや末尾にドットがあるものが含まれます.

ライブラリへの小さな変更

いつものように、Go 1の 互換性の約束を念頭に置いて行われた、ライブラリに対するさまざまな小さな変更と更新があります.

bufio

Scanner が無効な io.Reader と一緒に使用され、Read から誤って負の数を返す場合、Scanner は panic にならず、代わりに新しいエラー ErrBadReadCount を返すようになります.

context

nil の親を使用して派生 Context を作成することが明示的に禁止されるようになりました. WithValueWithDeadlineWithCancel 関数を使用してこれを行おうとすると、パニックを引き起こします.

crypto

crypto/rsacrypto/ecdsacrypto/ed25519 パッケージの PrivateKeyPublicKey 型に鍵の等価性を比較したり、公開鍵の型安全インタフェースを作成するための Equal メソッドが追加されました. このメソッドのシグネチャは、go-cmp の等価の定義と互換性があります.

Hashfmt.Stringer を実装しました.

crypto/ecdsa

新しい SignASN1 関数と VerifyASN1 関数は、標準 ASN.1 DER エンコーディングでECDSA 署名を生成し、検証することを可能にします.

crypto/elliptic

新しい MarshalCompressed 関数と UnmarshalCompressed 関数は圧縮形式での NIST 楕円曲線点のエンコードとデコードを可能にします.

crypto/rsa

VerifyPKCS1v15 は RFC 8017 に従って、先頭のゼロが欠落している無効な短い署名を拒否するようになりました.

crypto/tls

新しい Dialer 型とその DialContext メソッドにより、コンテキストを使用して TLS サーバとの接続とハンドシェイクの両方を行うことができます.

Config 型の新しい VerifyConnection コールバックにより、すべての接続に対してカスタム検証ロジックを適用することができます. このコールバックでは、ピア証明書、SCT、ステープルされた OCSP レスポンスを含む ConnectionState にアクセスすることができます.

自動生成されたセッションチケットの鍵は、forward secrecy への影響を制限するために、24時間ごとに自動的にローテーションされ、有効期限は7日間となりました.

接続の再開で再利用されるセッションキーである、TLS 1.2 およびそれ以前のバージョンのセッションチケットの寿命は forward secrecy への影響を制限するため、同様に7日に制限されました.

RFC 8446 で規定されているクライアント側のダウングレード保護チェックが実施されるようになりました. これにより、許可されていないダウングレード攻撃のような動作をするミドルボックスに遭遇したクライアントが接続エラーを起こす可能性があります。

SignatureSchemeCurveIDClientAuthTypefmt.Stringer を実装しました.

ConnectionState のフィールド OCSPResponseSignedCertificateTimestamps がクライアント側の再開された接続で再設定されるようになりました.

tls.Conn は、恒久的に壊れた接続に対して、一時的な net.Error をラップした不明瞭なエラーを返すようになりました. もとの net.Error にアクセスするのには、型アサーションではなく errors.As (または errors.Unwrap) を使います.

crypto/x509

証明書上の名前または (VerifyOptions.DNSNameVerifyHostname で) 検証されている名前のいずれかが無効な場合、それ以上の処理なしに大文字小文字を区別せずに比較されます(ワイルドカードを無視したり、末尾のドットを除去したりすることはありません). 無効な名前には、英字、数字、ハイフン、アンダースコア以外の文字、空のラベルを持つ名前、証明書の名前で末尾にドットがあるものが含まれます.

新しい CreateRevocationList 関数と RevocationList 型により、RFC 5280 準拠の X.509 v2 証明書失効リストを作成できるようになりました.

CreateCertificate はテンプレートが CA で SubjectKeyId が明示的に指定されていない場合、自動で生成するようになりました.

CreateCertificate は、テンプレートが MaxPathLen を指定しているが CA ではない場合に、エラーを返すようになりました.

macOS 以外の Unix システムで、SSL_CERT_DIR 環境変数をコロン区切りリストにできるようになりました.

macOS では、cgo が利用可能かどうかに関わらず、システムのトラストルートを取り出すために、バイナリは常に Security.framework に対してリンクされるようになりました. 結果として OS のベリファイアとより一貫した動作をするようになりました.

crypto/x509/pkix

ExtraNames が nil の場合、Name.StringNames から非標準属性を表示するようになりました.

database/sql

新しい DB.SetConnMaxIdleTime メソッドは、コネクションが一定期間アイドル状態になった後に、コネクションの総ライフスパンに関係なくコネクションプールからコネクションを削除することができます. DBStats.MaxIdleTimeClosed フィールドは DB.SetConnMaxIdleTime によってクローズされた接続の総数を示します.

新しい Row.Err ゲッターにより、Row.Scan を呼ばずにクエリエラーをチェックできるようになりました.

database/sql/driver

新しい Validator インターフェイスは Conn によって実装され、接続が有効かどうか、または破棄すべきかどうかをドライバがシグナルすることができるようになります.

debug/pe

PE ファイル形式で使われる定数 IMAGE_FILEIMAGE_SUBSYSTEMIMAGE_DLLCHARACTERISTICS が定義されました.

encoding/asn1

Marshal は X.690 DER に従って SET OF の構成要素をソートするようになりました.

Unmarshal は、X.690 DER に従って最小エンコードされていないタグとオブジェクト識別子を拒否するようになりました.

encoding/json

デコード時のネスティングの最大の深さに内部的な制限を持つようになりました. これにより、深くネストされた入力が大量のスタックメモリを使用したり、"goroutine stack exceeds limit" パニックが発生したりする可能性が減りました.

Unmarshal は、encoding.TextUnmarshaler を実装した文字列型のマップキーをサポートするようになりました

flag

flag パッケージが -h-help を見て、それらのフラグが定義されていない場合、使用状況のメッセージを表示するようになりました. FlagSetExitOnError で作成された場合、FlagSet.Parse はステータス 2 で終了します. このリリースでは、-h-help の終了ステータスが 0 に変更されました. 特にこれはコマンドラインフラグのデフォルト処理に適用されます.

fmt

表示動詞 %#g%#G は、浮動小数点値の末尾のゼロを維持するようになりました.

go/format

Source 関数と Node 関数は、Goソースコードのフォーマットの一部として、数値リテラルの接頭辞と指数を正規化するようになりました. これは、Go 1.13 以降に実装された gofmt コマンドの動作と一致しています.

html/template

すべての JavaScript と JSON のコンテキストで Unicode エスケープ (\uNNNN) を使用するようになりました. これにより application/ld+jsonapplication/json のコンテキストでのエスケープエラーが修正されました.

io/ioutil

TempDirTempFile はパス区切り文字を含むパターンを拒否するようになりました. つまり、ioutil.TempFile("/tmp", "../base*") のような呼び出しは成功しなくなりました. これにより、意図しないディレクトリトラバーサルを防ぐことができます.

math/big

新しい Int.FillBytes メソッドにより固定サイズのあらかじめ割り当てられたバイトスライスにシリアライズすることができるようになりました.

math/cmplx

本パッケージの関数は、無限大、NaN、符号付きゼロなどの特殊な引数の取り扱いに関して、C99 標準(Annex G IEC 60559 互換複素数演算)に準拠するように更新されました.

net

I/O 操作が Conn.SetDeadline メソッド、Conn.SetReadDeadline メソッド、Conn.SetWriteDeadline メソッドによって設定されたデッドラインを超えると、os.ErrDeadlineExceeded をラップしたエラーを返すようになりました. これによりエラーが期限を超えたことによるものかどうかを確実に検出することができます. 以前のリリースでは、エラーが発生した際に Timeout メソッドを呼び出すことを推奨していましたが、 期限を超えていないにもかかわらず Timeouttrue を返すエラーをI/O 操作が返すことがあります.

新しい Resolver.LookupIP メソッドは、ネットワーク固有の IP ルックアップとコンテキストを受け入れる IP ルックアップの両方をサポートしています.

net/http

HTTP Request Smuggling 攻撃が難しくなるようにパースがより厳格になりました. SP や HTAB のように非 ASCII ホワイトスペースはトリムされなくなり、"identity" Transfer-Encoding のサポートが削除されました.

net/http/httputil

ReverseProxy は、入ってくる Request.Header マップエントリの X-Forwarded-For フィールドを nil とすることによって、X-Forwarded-For を変更しないことをサポートするようになりました.

ReverseProxy によってハンドルされた Switching Protocol (WebSocket のような) リクエストがキャンセルされた場合、バックエンド接続が正しく閉じられるようになりました.

net/http/pprof

すべてのプロファイルエンドポイントが "seconds" パラメータをサポートするようになりました. 与えられた場合、エンドポイントは指定された秒数分のプロファイルを行い、その差分をレポートします. cpu プロファイルとトレースエンドポイントの "seconds" パラメータの意味は変更されていません.

net/url

新しい URL フィールド RawFragment とメソッド EscapedFragment は、特定のフラグメントの正確なエンコーディングについての詳細と制御を提供します. これらは RawPathEscapedPath に類似しています.

新しい URL のメソッド Redacted は、どのパスワードも xxxxx に置き換えた文字列形式の URL を返します.

os

I/O 操作が File.SetDeadline メソッド、File.SetReadDeadline メソッド、File.SetWriteDeadline メソッドによって設定されたデッドラインを超えると、os.ErrDeadlineExceeded をラップしたエラーを返すようになりました. これによりエラーが期限を超えたことによるものかどうかを確実に検出することができます. 以前のリリースでは、エラーが発生した際に Timeout メソッドを呼び出すことを推奨していましたが、 期限を超えていないにもかかわらず Timeouttrue を返すエラーをI/O 操作が返すことがあります.

パッケージ osnet は、EINTR で失敗したシステムコールを自動的に再試行するようになりました. 以前はこれが原因で偽のエラーが発生していましたが、Go 1.14 では非同期の先取り機能が追加されたことで、より一般的になりました. これが今や透過的に処理されるようになりました.

os.File 型が ReadFrom メソッドをサポートするようになりました. これにより、ある os.File から別の os.File にデータをコピーするために io.Copy を使用する際に、一部のシステムで copy_file_range システムコールを使用できるようになりました. 結果として、io.CopyBufferos.File にコピーするときに提供されたバッファを常に使用するとは限りません. プログラムが提供されたバッファを強制的に使用したい場合は、io.CopyBuffer(struct{ io.Writer }{dst}, src, buf) と書くことによって可能です.

plugin

macOS 上の -buildmode=plugin で DWARF の生成がサポートされました(デフォルトで有効になっています).

freebsd/amd64-buildmode=plugin でのビルドがサポートされました.

reflect

パッケージ reflect は、以前はエクスポートされていない埋め込みフィールドへのアクセスを許可していましたが、エクスポートされていないすべてのフィールドのメソッドへのアクセスを禁止するようになりました. 以前の動作に依存しているコードは、代わりに取り囲む変数に対応する昇格メソッドにアクセスするように更新する必要があります.

regexp

新しい Regexp.SubexpIndex メソッドは、正規表現内で指定された名前の最初のサブ式のインデックスを返します.

runtime

ReadMemStatsGoroutineProfile を含むいくつかの関数は、ガベージコレクションが進行中であってもブロックしなくなりました.

runtime/pprof

goroutine プロファイルはプロファイリング時に各 goroutine に関連付けられたプロファイルラベルを含むようになりました. この機能は debug=2 で報告されるプロファイルにはまだ実装されていません.

strconv

複素数を扱うための FormatComplexParseComplex が追加されました.

FormatComplex は、複素数を a と b を実数と虚数のパートとする (a+bi) 形式の文字列に変換します.

ParseComplex は文字列を指定した精度の複素数に変換します. ParseComplex は、N+Ni の形式の複素数を受け付けます.

sync

新しいメソッド Map.LoadAndDelete は、アトミックにキーを削除し、存在する場合は前の値を返します。

Map.Delete メソッドはより効率的になりました.

syscall

Unix システムでは、SysProcAttr を使用する関数は、どちらも Ctty フィールドを使用していますが、互換性のない方法で使用しているので、Setctty フィールドと Foreground フィールドの両方を設定しようとする試みを拒否するようになりました. 既存のプログラムで両方のフィールドを設定することはほとんどないと想定しています.

Setctty フィールドを設定するには、ProcAttr.Files フィールドによって決定されるように、Ctty フィールドを子プロセスのファイル記述子番号に設定する必要があります. 子ディスクリプタを使用すると常に動作しますが、親ファイルディスクリプタを使用するとたまたま動作する場合がありました. Setctty を設定するプログラムの中には、子ディスクリプタ番号を使用するために Ctty の値を変更する必要があるものがあります.

windows/amd64 で浮動小数点数の値を返すシステムコールを呼び出すことができるようになりました.

testing

testing.T型にテストバイナリがタイムアウトを超過した時間を報告するためのDeadlineメソッドが追加されました.

TestMain関数はos.Exitを呼び出す必要がなくなりました. TestMain関数から戻ったとき、テストバイナリはm.Runによって返された値を使ってos.Exitを呼び出します.

新しいメソッドT.TempDirB.TempDirは、テスト終了時に自動的にクリーンアップされる一時ディレクトリを返します.

go test -v テスト名を各行に表示するのではなく、テスト名によって出力をグループ化するようになりました.

text/template

JSEscape は JSON と互換性のある Unicode エスケープ (\u00XX) を一貫して使うようになりました.

time

新しいメソッドTicker.Resetはティッカーの期間の変更をサポートしています。

エラーを返すときに、ParseDurationが元の値を引用するようになりました.

c-yan
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away