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

JavaScriptを有効にしてください

前書き

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

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

Go 1.15の紹介

最新のGoリリースであるバージョン1.15は、Go 1.14 から6か月後に登場しました。変更のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装にあります。いつものように、このリリースはGo 1の互換性の約束 を維持しています。ほとんどのGoプログラムは、これまで通りコンパイルおよび実行されることを期待しています。Go 1.15には、リンカの大幅な改善 が含まれており、高コア数での小さなオブジェクトの割り当て を改善し、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/386およびdarwin/armポート)。Goは引き続き64ビットのdarwin/amd64およびdarwin/arm64ポートをサポートします。

Windows

Goは、-buildmode=pie cmd/linkフラグが提供された場合にWindows ASLR実行ファイルを生成します。GoコマンドはWindowsでデフォルトで-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=armおよびGOARCH=arm64でのOpenBSD 6.7のサポートを追加しました。以前のGoバージョンはすでにGOARCH=386およびGOARCH=amd64でのOpenBSD 6.7をサポートしていました。

RISC-V

Linux(GOOS=linuxGOARCH=riscv64)での64ビットRISC-Vポートの安定性とパフォーマンスの向上が進展しています。また、非同期プリエンプションもサポートしています。

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のデフォルト値はhttps://proxy.golang.org,directのままであり、エラーの場合に直接にフォールバックしません。

go test

-timeoutフラグを変更すると、キャッシュされたテスト結果が無効になります。長いタイムアウトで実行されたテストのキャッシュされた結果は、短いタイムアウトでgo testが再実行されたときに合格としてカウントされなくなります。

フラグ解析

go testおよびgo vetのさまざまなフラグ解析の問題が修正されました。特に、GOFLAGSで指定されたフラグはより一貫して処理され、-outputdirフラグは相対パスをgoコマンドの作業ディレクトリに対して解釈するようになりました(各個別のテストの作業ディレクトリではなく)。

モジュールキャッシュ

モジュールキャッシュの場所は、GOMODCACHE環境変数で設定できるようになりました。GOMODCACHEのデフォルト値はGOPATH[0]/pkg/modであり、これはこの変更前のモジュールキャッシュの場所です。ファイルシステムを同時にスキャンする外部プログラムによって引き起こされる、モジュールキャッシュにアクセスするgoコマンドでのWindowsの「アクセスが拒否されました」エラーの回避策が利用可能になりました(issue #36568 を参照)。この回避策はデフォルトでは有効になっていません。なぜなら、Goのバージョンが1.14.2未満および1.13.10未満で同じモジュールキャッシュを同時に使用している場合には安全ではないからです。環境変数GODEBUG=modcacheunzipinplace=1を明示的に設定することで有効にできます。

Vet

string(x)の新しい警告

vetツールは、string(x)の形式の変換について警告するようになりました。ここでxruneまたはbyte以外の整数型です。Goの経験から、この形式の多くの変換が誤ってstring(x)が整数xの文字列表現に評価されると仮定していることが示されています。実際には、xの値のUTF-8エンコーディングを含む文字列に評価されます。例えば、string(9786)は文字列"9786"には評価されず、文字列"\xe2\x98\xba"、つまり"☺"に評価されます。string(x)を正しく使用しているコードは、string(rune(x))に書き換えることができます。または、場合によっては、適切なバイトスライスbufを使用してutf8.EncodeRune(buf, x)を呼び出すことが正しい解決策かもしれません。他のコードはおそらくstrconv.Itoaまたはfmt.Sprintを使用するべきです。この新しいvetチェックは、go testを使用するとデフォルトで有効になります。将来のGoリリースでこの変換を禁止することを検討しています。つまり、言語はxの型がruneまたはbyteの場合にのみ整数xに対してstring(x)を許可するように変更されます。このような言語の変更は後方互換性がありません。この言語変更に向けた最初の試験的なステップとして、このvetチェックを使用しています。

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

vetツールは、型アサーションが常に失敗する場合に、あるインターフェース型から別のインターフェース型への型アサーションについて警告するようになりました。これは、両方のインターフェース型が同じ名前のメソッドを異なる型シグネチャで実装している場合に発生します。常に失敗する型アサーションを書く理由はないため、このvetチェックをトリガーするコードは書き換える必要があります。この新しいvetチェックは、go testを使用するとデフォルトで有効になります。将来のGoリリースで不可能なインターフェース型アサーションを禁止することを検討しています。このような言語の変更は後方互換性がありません。この言語変更に向けた最初の試験的なステップとして、このvetチェックを使用しています。

ランタイム

panicが以下のいずれかの型から派生した値で呼び出された場合:boolcomplex64complex128float32float64intint8int16int32int64stringuintuint8uint16uint32uint64uintptr、その値がアドレスだけでなく印刷されます。以前は、これらの型に正確に一致する値に対してのみこれが真でした。Unixシステムでは、killコマンドまたはkillシステムコールを使用してGoプログラムにSIGSEGVSIGBUS、またはSIGFPE信号を送信し、信号がos/signal.Notifyを介して処理されていない場合、Goプログラムはスタックトレースとともに確実にクラッシュします。以前のリリースでは、この動作は予測不可能でした。小さなオブジェクトの割り当ては、高コア数でのパフォーマンスが大幅に向上し、最悪のケースのレイテンシーが低下しました。小さな整数値をインターフェース値に変換しても、割り当てが発生しなくなりました。閉じたチャネルでの非ブロッキング受信は、開いたチャネルでの非ブロッキング受信と同様にパフォーマンスが向上しました。

コンパイラ

パッケージunsafe安全性ルール は、特定の関数を呼び出す際にunsafe.Pointeruintptrに変換することを許可しています。以前は、場合によっては、コンパイラは複数の連鎖変換(例えば、syscall.Syscall(…, uintptr(uintptr(ptr)), …))を許可していました。コンパイラは現在、正確に1回の変換を要求しています。複数の変換を使用していたコードは、安全性ルールを満たすように更新する必要があります。Go 1.15は、特定のタイプのGCメタデータを排除し、未使用のタイプメタデータをより積極的に排除することにより、Go 1.14と比較して典型的なバイナリサイズを約5%削減します。ツールチェーンは現在、GOARCH=amd64Intel CPUエラタSKX102 を緩和するために、関数を32バイト境界に整列させ、ジャンプ命令をパディングします。このパディングはバイナリサイズを増加させますが、上記のバイナリサイズの改善によって十分に補われます。Go 1.15は、コンパイラとアセンブラの両方に-spectreフラグを追加し、Spectreの緩和を有効にすることができます。これらはほとんど必要とされることはなく、主に「深層防御」メカニズムとして提供されています。詳細については、Spectre wikiページ を参照してください。コンパイラは、適用される宣言に意味のない//go:コンパイラディレクティブを「誤ったコンパイラディレクティブ」エラーで拒否するようになりました。このような誤適用されたディレクティブは以前は壊れていましたが、コンパイラによって黙って無視されていました。コンパイラの-json最適化ログは、128バイト以上の大きなコピーを報告し、エスケープ解析の決定の説明を含むようになりました。

リンカ

このリリースには、Goリンカの大幅な改善が含まれており、リンカのリソース使用量(時間とメモリの両方)を削減し、コードの堅牢性/保守性を向上させます。代表的な大規模Goプログラムのセットでは、リンクが20%速くなり、平均して30%少ないメモリを必要とします。これは、amd64アーキテクチャで実行されるELFベースのOS(Linux、FreeBSD、NetBSD、OpenBSD、Dragonfly、およびSolaris)でのことです。他のアーキテクチャ/OSの組み合わせでは、より控えめな改善が見られます。リンカのパフォーマンス向上の主な要因は、新しく設計されたオブジェクトファイル形式と、並行性を高めるための内部フェーズの刷新(例えば、シンボルへの再配置を並行して適用すること)です。Go 1.15のオブジェクトファイルは、1.14の同等品よりもわずかに大きくなっています。これらの変更は、Goリンカを近代化する ための複数リリースプロジェクトの一部であり、将来のリリースで追加のリンカ改善が期待されています。リンカは現在、linux/amd64およびlinux/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を使用してビルドすることで、タイムゾーンデータベースを埋め込むこともできます。どちらの方法でも、プログラムのサイズが約800 KB増加します。

Cgo

Go 1.15は、CタイプEGLConfigをGoタイプuintptrに変換します。この変更は、Go 1.12以降がEGLDisplay、DarwinのCoreFoundation、およびJavaのJNIタイプをどのように扱うかに似ています。詳細については、cgoドキュメント を参照してください。Go 1.15.3以降、cgoはGoコードが未定義の構造体型(struct S;または類似のC構造体)をスタックまたはヒープに割り当てることを許可しません。Goコードはこれらの型へのポインタのみを使用することが許可されます。このような構造体のインスタンスを割り当て、ポインタまたは完全な構造体値をCコードに渡すことは常に安全ではなく、正しく動作する可能性は低かったため、現在は禁止されています。修正方法は、Goコードをポインタのみを使用するように書き換えるか、適切なCヘッダーファイルを含めてGoコードが構造体の完全な定義を確認できるようにすることです。

X.509 CommonNameの非推奨

X.509証明書のCommonNameフィールドを、Subject Alternative Namesが存在しない場合にホスト名として扱うという非推奨のレガシー動作は、デフォルトで無効になりました。GODEBUG環境変数にx509ignoreCN=0の値を追加することで、一時的に再有効化できます。CommonNameが無効なホスト名である場合、それは常に無視されます。無効な名前には、文字、数字、ハイフン、アンダースコア以外の文字を含むもの、空のラベルを持つもの、または末尾にドットがあるものが含まれます。

ライブラリの小さな変更

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

bufio

Scanner が無効なio.Reader とともに使用され、Readから負の数を誤って返す場合、Scannerはパニックを起こさず、新しいエラーErrBadReadCountを返します。

context

nilの親を使用して派生したContextを作成することは、明示的に禁止されるようになりました。WithValueWithDeadline 、またはWithCancel 関数を使用してこれを試みると、パニックが発生します。

crypto

crypto/rsacrypto/ecdsa 、およびcrypto/ed25519 パッケージのPrivateKeyおよびPublicKey型には、キーを等価性で比較したり、公開キーの型安全なインターフェースを作成したりするためのEqualメソッドが追加されました。メソッドシグネチャは、go-cmpの等価性の定義 と互換性があります。Hash は、fmt.Stringer を実装するようになりました。

crypto/ecdsa

新しいSignASN1 およびVerifyASN1 関数により、標準のASN.1 DERエンコーディングでECDSA署名を生成および検証できます。

crypto/elliptic

新しいMarshalCompressed およびUnmarshalCompressed 関数により、NIST楕円曲線ポイントを圧縮形式でエンコードおよびデコードできます。

crypto/rsa

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

crypto/tls

新しいDialer 型とそのDialContext メソッドにより、TLSサーバーとの接続とハンドシェイクの両方にコンテキストを使用できます。新しいVerifyConnection コールバックは、Config 型にあり、各接続に対してカスタム検証ロジックを許可します。これは、ピア証明書、SCT、およびステープルOCSPレスポンスを含むConnectionState にアクセスできます。自動生成されたセッションチケットキーは、前方秘匿性への影響を制限するために、24時間ごとに自動的に回転され、寿命は7日間です。TLS 1.2およびそれ以前のセッションチケットの寿命は、再開された接続でセッションキーが再利用されるため、前方秘匿性への影響を制限するために7日間に制限されます。RFC 8446で指定されたクライアント側のダウングレード保護チェックが現在強制されています。これは、許可されていないダウングレード攻撃のように振る舞うミドルボックスに遭遇するクライアントに接続エラーを引き起こす可能性があります。SignatureSchemeCurveID 、およびClientAuthType は、fmt.Stringer を実装するようになりました。ConnectionState フィールドOCSPResponseおよびSignedCertificateTimestampsは、クライアント側の再開された接続で再度設定されます。tls.Conn は、恒久的に壊れた接続で不透明なエラーを返し、一時的なnet.Error をラップします。元のnet.Errorにアクセスするには、型アサーションの代わりにerrors.As (またはerrors.Unwrap )を使用します。

crypto/x509

証明書の名前または検証される名前(VerifyOptions.DNSName またはVerifyHostname を使用)が無効な場合、それらはワイルドカードを尊重したり末尾のドットを削除したりせずに、ケースインセンシティブに比較されます。無効な名前には、文字、数字、ハイフン、アンダースコア以外の文字を含むもの、空のラベルを持つもの、および証明書上の末尾にドットがあるものが含まれます。新しい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

Name.String は、ExtraNamesnilの場合、Names からの非標準属性を印刷するようになりました。

database/sql

新しいDB.SetConnMaxIdleTime メソッドにより、接続プールから接続を削除することができるようになりました。接続の総寿命に関係なく、一定期間アイドル状態であった後に削除されます。DBStats.MaxIdleTimeClosed フィールドは、DB.SetConnMaxIdleTimeによって閉じられた接続の総数を示します。新しいRow.Err ゲッターにより、Row.Scanを呼び出さずにクエリエラーを確認できます。

database/sql/driver

新しいValidator インターフェースは、接続が有効かどうか、または破棄されるべきかどうかをドライバーが通知できるようにするためにConnによって実装される場合があります。

debug/pe

パッケージは現在、PEファイル形式で使用されるIMAGE_FILEIMAGE_SUBSYSTEM、およびIMAGE_DLLCHARACTERISTICS定数を定義しています。

encoding/asn1

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

encoding/json

パッケージには、デコード時の最大ネスト深度に内部制限が設けられました。これにより、深くネストされた入力が大量のスタックメモリを使用する可能性や、「goroutine stack exceeds limit」パニックを引き起こす可能性が減少します。

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+jsonおよびapplication/jsonコンテキストでのエスケープエラーが修正されます。

io/ioutil

TempDir およびTempFile は、パスセパレータを含むパターンを拒否するようになりました。つまり、ioutil.TempFile("/tmp", "../base*")のような呼び出しは成功しなくなります。これにより、意図しないディレクトリトラバーサルが防止されます。

math/big

新しいInt.FillBytes メソッドにより、固定サイズの事前割り当てされたバイトスライスにシリアル化できます。

math/cmplx

このパッケージの関数は、無限大、NaN、および符号付きゼロなどの特殊な引数の処理に関して、C99標準(IEC 60559互換の複素数演算)に準拠するように更新されました。

net

Conn.SetDeadlineConn.SetReadDeadline、またはConn.SetWriteDeadlineメソッドで設定された期限を超えるI/O操作は、現在、os.ErrDeadlineExceededを返すエラーを返します。これにより、エラーが期限超過によるものであるかどうかを確実に検出できます。以前のリリースでは、エラーのTimeoutメソッドを呼び出すことが推奨されていましたが、I/O操作は、期限が超過していない場合でもTimeouttrueを返すエラーを返す可能性があります。新しいResolver.LookupIP メソッドは、ネットワーク固有のIPルックアップをサポートし、コンテキストを受け入れます。

net/http

解析は、リクエストスミアリング攻撃に対する強化措置として、より厳格になりました:非ASCIIホワイトスペースはSPおよびHTABのようにトリムされなくなり、「identity」転送エンコーディングのサポートが削除されました。

net/http/httputil

ReverseProxy は、Request.Headerマップエントリがnilの場合にX-Forwarded-Forヘッダーを変更しないことをサポートするようになりました。ReverseProxy によって処理されるプロトコル切り替え(WebSocketなど)のリクエストがキャンセルされた場合、バックエンド接続が正しく閉じられるようになりました。

net/http/pprof

すべてのプロファイルエンドポイントは、現在「秒」パラメータをサポートしています。指定された秒数のプロファイルを行い、差分を報告します。CPUプロファイルおよびトレースエンドポイントでの「秒」パラメータの意味は変更されていません。

net/url

新しいURL フィールドRawFragmentおよびメソッドEscapedFragment は、特定のフラグメントの正確なエンコーディングに関する詳細を提供し、制御します。これらはRawPathおよびEscapedPath に類似しています。新しいURL メソッドRedacted は、パスワードをxxxxxに置き換えた文字列形式のURLを返します。

os

File.SetDeadlineFile.SetReadDeadline 、またはFile.SetWriteDeadline メソッドで設定された期限を超えるI/O操作は、現在、os.ErrDeadlineExceededを返すエラーを返します。これにより、エラーが期限超過によるものであるかどうかを確実に検出できます。以前のリリースでは、エラーのTimeoutメソッドを呼び出すことが推奨されていましたが、I/O操作は、期限が超過していない場合でもTimeouttrueを返すエラーを返す可能性があります。osおよびnetパッケージは、EINTRで失敗するシステムコールを自動的に再試行するようになりました。以前は、これは誤った失敗を引き起こし、Go 1.14で非同期プリエンプションが追加されたことでより一般的になりました。現在、これは透過的に処理されます。os.File 型は、ReadFrom メソッドをサポートするようになりました。これにより、いくつかのシステムでio.Copyを使用してデータを1つのos.Fileから別のos.Fileにコピーする際にcopy_file_rangeシステムコールを使用できるようになります。その結果、io.CopyBufferは、os.Fileにコピーする際に常に提供されたバッファを使用するわけではありません。プログラムが提供されたバッファの使用を強制したい場合は、io.CopyBuffer(struct{ io.Writer }{dst}, src, buf)と書くことで実現できます。

plugin

DWARF生成は、macOSで-buildmode=pluginに対してサポートされ(デフォルトで有効)、FreeBSD/amd64での-buildmode=pluginでのビルドがサポートされるようになりました。

reflect

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

regexp

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

runtime

ReadMemStatsGoroutineProfile などのいくつかの関数は、ガベージコレクションが進行中の場合にブロックしなくなりました。

runtime/pprof

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

strconv

FormatComplex およびParseComplex が追加され、複素数を扱うことができます。FormatComplex は、複素数を(a+bi)の形式の文字列に変換します。ここで、abは実部と虚部です。ParseComplex は、指定された精度の複素数を文字列から変換します。ParseComplexは、N+Ni形式の複素数を受け入れます。

sync

新しいメソッドMap.LoadAndDelete は、キーを削除し、以前の値が存在する場合はそれを返します。メソッドMap.Delete は、より効率的になりました。

syscall

Unixシステムでは、SysProcAttr を使用する関数は、SetcttyForegroundフィールドの両方を設定しようとする試みを拒否するようになりました。これらは両方ともCttyフィールドを使用しますが、互換性のない方法で使用します。既存のプログラムが両方のフィールドを設定することはほとんどないと予想しています。Setcttyフィールドを設定するには、Cttyフィールドが子プロセスのファイルディスクリプタ番号に設定されている必要があります。これは、ProcAttr.Filesフィールドによって決定されます。子ディスクリプタを使用することは常に機能しましたが、親ファイルディスクリプタを使用することも機能する場合がありました。Setcttyを設定するプログラムの一部は、Cttyの値を子ディスクリプタ番号に変更する必要があります。windows/amd64で浮動小数点値を返すシステムコールを呼び出すことが可能になりました

testing

testing.T型には、テストバイナリがタイムアウトを超えた時間を報告するDeadline メソッドが追加されました。TestMain関数は、os.Exitを呼び出す必要がなくなりました。TestMain関数が戻ると、テストバイナリはm.Runによって返された値でos.Exitを呼び出します。新しいメソッドT.TempDir およびB.TempDir は、テストの終了時に自動的にクリーンアップされる一時ディレクトリを返します。go test -vは、各行にテスト名を印刷するのではなく、テスト名で出力をグループ化するようになりました。

text/template

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

time

新しいメソッドTicker.Reset は、ティッカーの期間を変更することをサポートします。ParseDuration がエラーを返す場合、元の値を引用するようになりました。


スポンサーリンク

共有

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