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

JavaScriptを有効にしてください

前書き

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

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

Go 1.13の紹介

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

Go 1.13以降、goコマンドはデフォルトでGoogleが運営するGoモジュールミラーとGoチェックサムデータベースを使用してモジュールをダウンロードおよび認証します。これらのサービスに関するプライバシー情報についてはこちら を、これらのサーバーの使用を無効にする方法や異なるサーバーを使用する方法を含む設定の詳細についてはgoコマンドのドキュメント を参照してください。非公開モジュールに依存している場合は、環境の設定に関するドキュメント を参照してください。

言語の変更

数値リテラル提案 に従い、Go 1.13はより統一された現代的な数値リテラルのプレフィックスをサポートします。

バイナリ整数リテラル : プレフィックス0bまたは0Bは、0b1011のようなバイナリ整数リテラルを示します。
8進整数リテラル : プレフィックス0oまたは0Oは、0o660のような8進整数リテラルを示します。先頭に0を付けた既存の8進表記は有効なままです。
16進浮動小数点リテラル : プレフィックス0xまたは0Xは、0x1.0p-1021のように16進形式で浮動小数点数の仮数を表現するために使用できます。16進浮動小数点数は常に指数を持ち、pまたはPの文字と10進の指数で書かれます。指数は仮数を2の指数乗でスケールします。
虚数リテラル : 虚数のサフィックスiは、任意の(バイナリ、10進、16進)整数または浮動小数点リテラルと共に使用できます。
数字の区切り文字: 任意の数値リテラルの数字は、1_000_0000b_1010_01103.1415_9265のようにアンダースコアで区切ることができます。アンダースコアは、任意の2つの数字またはリテラルのプレフィックスと最初の数字の間に現れることができます。

符号付きシフトカウント提案 に従い、Go 1.13はシフトカウント が符号なしでなければならないという制限を削除しました。この変更により、«および»演算子のこの(現在削除された)制限を満たすために導入された多くの人工的なuint変換が不要になります。これらの言語変更は、コンパイラの変更と、ライブラリパッケージgo/scanner およびtext/scanner (数値リテラル)、およびgo/types (符号付きシフトカウント)の対応する内部変更によって実装されました。コードがモジュールを使用しており、go.modファイルに言語バージョンが指定されている場合は、これらの言語変更にアクセスするために少なくとも1.13に設定されていることを確認してください。これを行うには、go.modファイルを直接編集するか、go mod edit -go=1.13を実行します。

ポート

Go 1.13は、Native Client(NaCl)で実行される最後のリリースです。GOARCH=wasmの場合、新しい環境変数GOWASMは、バイナリがコンパイルされる実験的な機能のカンマ区切りリストを取ります。有効な値はこちら に記載されています。

AIX

PPC64上のAIX(aix/ppc64)は、cgo、外部リンク、およびc-archivepieビルドモードをサポートするようになりました。

Android

GoプログラムはAndroid 10と互換性があります。

Darwin

Go 1.12のリリースノートで発表された ように、Go 1.13はmacOS 10.11 El Capitan以降を必要とし、以前のバージョンのサポートは終了しました。

FreeBSD

Go 1.12のリリースノートで発表された ように、Go 1.13はFreeBSD 11.2以降を必要とし、以前のバージョンのサポートは終了しました。FreeBSD 12.0以降では、COMPAT_FREEBSD11オプションが設定されたカーネルが必要です(これはデフォルトです)。

Illumos

GoはGOOS=illumosでIllumosをサポートするようになりました。illumosビルドタグはsolarisビルドタグを含みます。

Windows

内部リンクされたWindowsバイナリで指定されたWindowsバージョンは、NT 4.0ではなくWindows 7になりました。これはすでにGoの最小必要バージョンでしたが、後方互換性モードを持つシステムコールの動作に影響を与える可能性があります。これらは今後、ドキュメントに記載された通りに動作します。外部リンクされたバイナリ(cgoを使用するプログラム)は常により新しいWindowsバージョンを指定していました。

ツール

モジュール

環境変数

GO111MODULE 環境変数は引き続きautoがデフォルトですが、auto設定は現在の作業ディレクトリがgo.modファイルを含むディレクトリ内またはその下にある場合にgoコマンドのモジュール対応モードをアクティブにします。これにより、GOPATH/src内の既存のコードの移行と、モジュール対応パッケージと非モジュール対応インポーターの並行メンテナンスが簡素化されます。新しいGOPRIVATE 環境変数は、公開されていないモジュールパスを示します。これは、プロキシ経由で取得され、チェックサムデータベースを使用して検証されるモジュールをより細かく制御するための下位レベルのGONOPROXYおよびGONOSUMDB変数のデフォルト値として機能します。GOPROXY環境変数 は、カンマ区切りのプロキシURLリストまたは特別なトークンdirectに設定でき、そのデフォルト値https://proxy.golang.org,directです。パッケージパスを含むモジュールに解決する際、goコマンドはリスト内の各プロキシで候補モジュールパスを順次試みます。到達不能なプロキシまたは404または410以外のHTTPステータスコードは、残りのプロキシを参照せずに検索を終了します。新しいGOSUMDB 環境変数は、まだメインモジュールのgo.sumファイルにリストされていないモジュールのチェックサムを照会するデータベースの名前と、オプションで公開鍵とサーバーURLを識別します。GOSUMDBに明示的なURLが含まれていない場合、URLはチェックサムデータベースのサポートを示すエンドポイントをGOPROXY URLでプロービングすることによって選択され、どのプロキシでもサポートされていない場合は名前付きデータベースへの直接接続にフォールバックします。GOSUMDBoffに設定されている場合、チェックサムデータベースは参照されず、go.sumファイルに既存のチェックサムのみが検証されます。デフォルトのプロキシとチェックサムデータベースに到達できないユーザー(たとえば、ファイアウォールまたはサンドボックス化された構成のため)は、GOPROXYdirectに、またはGOSUMDBoffに設定してその使用を無効にすることができます。go env -w を使用して、プラットフォームに依存せずにこれらの変数のデフォルト値を設定できます:

bash
1
2
go env -w GOPROXY=direct
go env -w GOSUMDB=off

go get

モジュール対応モードでは、-uフラグを使用したgo get は、GOPATHモードでgo get -uによって更新されるパッケージのセットとより一貫性のある小さなモジュールセットを更新します。go get -uは引き続きコマンドラインで指定されたモジュールとパッケージを更新しますが、指定されたパッケージによってインポートされたパッケージを含むモジュールのみを追加で更新し、指定されたパッケージを含むモジュールの推移的モジュール要件ではありません。特に、追加の引数なしでgo get -uは、現在のディレクトリのパッケージの推移的インポートのみを更新します。代わりに、メインモジュールによって推移的にインポートされたすべてのパッケージ(テスト依存関係を含む)を更新するには、go get -u allを使用します。上記のgo get -uの変更の結果として、go getサブコマンドはもはや-mフラグをサポートしていません。これは、go getがパッケージをロードする前に停止する原因となっていました。-dフラグは引き続きサポートされており、指定されたパッケージの依存関係をビルドするために必要なソースコードをダウンロードした後にgo getを停止させ続けます。デフォルトでは、モジュールモードのgo get -uGOPATHモードと同様に非テスト依存関係のみをアップグレードします。現在は-tフラグも受け入れ、(GOPATHモードと同様に)go getがコマンドラインで指定されたパッケージのテストによってインポートされたパッケージを含めるようにします。モジュール対応モードでは、go getサブコマンドはバージョン接尾辞@patchをサポートするようになりました。@patch接尾辞は、指定されたモジュールまたは指定されたパッケージを含むモジュールが、ビルドリストに見つかったバージョンと同じメジャーおよびマイナーバージョンを持つ最高のパッチリリースに更新されるべきであることを示します。バージョン接尾辞なしでgo getに引数として渡されたモジュールが、最新のリリースバージョンよりも新しいバージョンで既に必要とされている場合、それは新しいバージョンのままです。これはモジュール依存関係の-uフラグの動作と一致しています。これにより、プレリリースバージョンからの予期しないダウングレードが防止されます。新しいバージョン接尾辞@upgradeはこの動作を明示的に要求します。@latestは現在のバージョンに関係なく最新バージョンを明示的に要求します。

バージョン検証

バージョン管理システムからモジュールを抽出する際、goコマンドは要求されたバージョン文字列に対して追加の検証を行います。+incompatibleバージョン注釈は、モジュールの導入以前のリポジトリに対するセマンティックインポートバージョニング の要件をバイパスします。goコマンドは、そのようなバージョンに明示的なgo.modファイルが含まれていないことを確認します。goコマンドは、疑似バージョン とバージョン管理メタデータの間のマッピングを検証します。具体的には:

  • バージョンプレフィックスはvX.0.0の形式であるか、指定されたリビジョンの祖先にあるタグから派生するか、指定されたリビジョン自体にビルドメタデータ を含むタグから派生する必要があります。
  • 日付文字列はリビジョンのUTCタイムスタンプと一致する必要があります。
  • リビジョンの短い名前は、goコマンドが生成するものと同じ文字数を使用する必要があります(gitで使用されるSHA-1ハッシュの場合、12桁のプレフィックス)。

メインモジュールのrequireディレクティブ が無効な疑似バージョンを使用している場合、通常はバージョンをコミットハッシュに削除してgo list -m allgo mod tidyなどのgoコマンドを再実行することで修正できます。たとえば、

bash
1
require github.com/docker/docker v1.14.0-0.20190319215453-e7b5f7dbe98c

bash
1
require github.com/docker/docker e7b5f7dbe98c

に削除でき、現在は

bash
1
require github.com/docker/docker v0.7.3-0.20190319215453-e7b5f7dbe98c

に解決されます。メインモジュールの推移的依存関係の1つが無効なバージョンまたは疑似バージョンを必要とする場合、無効なバージョンはメインモジュールのgo.modファイル内のreplaceディレクティブ を使用して有効なものに置き換えることができます。置き換えがコミットハッシュである場合、上記のように適切な疑似バージョンに解決されます。たとえば、

bash
1
replace github.com/docker/docker v1.14.0-0.20190319215453-e7b5f7dbe98c => github.com/docker/docker e7b5f7dbe98c

は現在

bash
1
replace github.com/docker/docker v1.14.0-0.20190319215453-e7b5f7dbe98c => github.com/docker/docker v0.7.3-0.20190319215453-e7b5f7dbe98c

に解決されます。

Goコマンド

go env コマンドは、goコマンドで認識される環境変数のユーザーごとのデフォルト値を設定するための-wフラグを受け入れるようになり、以前に設定されたデフォルトを解除するための対応する-uフラグもあります。go env -wを介して設定されたデフォルトは、os.UserConfigDir()内のgo/envファイルに保存されます。go version コマンドは、実行可能ファイルやディレクトリを指定する引数を受け入れるようになりました。実行可能ファイルに対して呼び出された場合、go versionはその実行可能ファイルをビルドするために使用されたGoのバージョンを出力します。-mフラグが使用されている場合、go versionは実行可能ファイルに埋め込まれたモジュールバージョン情報を出力します(利用可能な場合)。ディレクトリに対して呼び出された場合、go versionはそのディレクトリとそのサブディレクトリに含まれる実行可能ファイルに関する情報を出力します。新しいgo buildフラグ -trimpathは、ビルドの再現性を向上させるために、コンパイルされた実行可能ファイルからすべてのファイルシステムパスを削除します。go buildに渡された-oフラグが既存のディレクトリを指している場合、go buildはそのディレクトリ内にパッケージ引数に一致するメインパッケージの実行可能ファイルを書き込みます。go buildフラグ-tagsは、ビルドタグのカンマ区切りリストを受け取るようになり、GOFLAGS内で複数のタグを許可します。スペース区切り形式は非推奨ですが、まだ認識されており、維持されます。go generate は、ファイルがディレクティブを検索するために使用されるがビルド中に無視されるように、generateビルドタグを設定します。Go 1.12のリリースノートで発表された ように、バイナリのみのパッケージはもはやサポートされていません。バイナリのみのパッケージ(//go:binary-only-packageコメントでマークされた)をビルドすると、エラーが発生します。

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

コンパイラには、より正確なエスケープ解析の新しい実装があります。ほとんどのGoコードにとっては改善(つまり、より多くのGo変数と式がヒープではなくスタックに割り当てられる)であるはずです。しかし、この精度の向上により、以前は動作していた無効なコードが壊れる可能性もあります(たとえば、unsafe.Pointerの安全ルール に違反するコード)。関連すると思われる回帰が発生した場合、古いエスケープ解析パスはgo build -gcflags=all=-newescape=falseで再有効化できます。古いエスケープ解析を使用するオプションは、将来のリリースで削除されます。コンパイラはもはや浮動小数点または複素数定数をgo_asm.hファイルに出力しません。これらは常にアセンブリコード内で数値定数として使用できない形式で出力されていました。

アセンブラ

アセンブラは、ARM v8.1で導入された多くのアトミック命令をサポートするようになりました。

gofmt

gofmt(およびそれに伴うgo fmt)は、数値リテラルのプレフィックスと指数を小文字に正規化しますが、16進数の数字はそのままにします。これは、新しい8進プレフィックス(0O0oになる)の使用時の可読性を向上させ、書き換えが一貫して適用されます。gofmtはまた、10進整数虚数リテラルから不要な先行ゼロを削除します(後方互換性のため、0で始まる整数虚数リテラルは8進数ではなく10進数と見なされます。不要な先行ゼロを削除することで、潜在的な混乱を避けます)。たとえば、0B10100XabcDEF0O6601.2E301iは、gofmtを適用した後に0b10100xabcDEF0o6601.2e31iになります。

godocとgo doc

godocウェブサーバーはもはやメインのバイナリ配布に含まれていません。ローカルでgodocウェブサーバーを実行するには、最初に手動でインストールしてください:

bash
1
2
go get golang.org/x/tools/cmd/godoc
godoc

go doc コマンドは、コマンドを除いて常に出力にパッケージ句を含めるようになりました。これは、以前のヒューリスティックを使用した動作を置き換え、特定の条件下でパッケージ句が省略される原因となっていました。

ランタイム

範囲外のパニックメッセージには、範囲外のインデックスとスライスの長さ(または容量)が含まれるようになりました。たとえば、長さ1のスライスでs[3]を実行すると、「runtime error: index out of range [3] with length 1」というパニックが発生します。

このリリースでは、deferのほとんどの使用のパフォーマンスが30%向上しています。

ランタイムは、共同テナントアプリケーションに利用可能なメモリをオペレーティングシステムに返すのにより積極的になりました。以前は、ランタイムはヒープサイズのスパイクの後に5分以上メモリを保持することがありましたが、ヒープが縮小した後にすぐに返し始めます。ただし、Linuxを含む多くのOSでは、OS自体がメモリを遅延して回収するため、プロセスRSSはシステムがメモリ圧力下にあるまで減少しません。

標準ライブラリ

TLS 1.3

Go 1.12で発表されたように、Go 1.13ではcrypto/tlsパッケージでTLS 1.3のサポートがデフォルトで有効になっています。GODEBUG環境変数にtls13=0の値を追加することで無効にできます。このオプトアウトはGo 1.14で削除されます。重要な互換性情報についてはGo 1.12のリリースノート を参照してください。

crypto/ed25519

新しいcrypto/ed25519 パッケージは、Ed25519署名スキームを実装しています。この機能は以前、golang.org/x/crypto/ed25519 パッケージによって提供されていましたが、Go 1.13+で使用するとcrypto/ed25519のラッパーになります。

エラーラッピング

Go 1.13には、Error Values提案 で最初に提案され、関連する問題 で議論されたエラーラッピングのサポートが含まれています。エラーeは、Unwrapメソッドを提供して別のエラーwをラップできます。ewの両方がプログラムで利用可能であり、ewに追加のコンテキストを提供したり、wを再解釈したりしながら、プログラムがwに基づいて決定を下すことができます。ラッピングをサポートするために、fmt.Errorf にはラップされたエラーを作成するための%w動詞が追加され、errors パッケージの3つの新しい関数(errors.Unwraperrors.Is 、およびerrors.As )がラップされたエラーのアンラップと検査を簡素化します。詳細については、errorsパッケージのドキュメント を読むか、Error Value FAQ を参照してください。近日中にブログ投稿も予定されています。

ライブラリの小さな変更

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

bytes

新しいToValidUTF8 関数は、無効なUTF-8バイトシーケンスの各ランを指定されたスライスで置き換えた指定されたバイトスライスのコピーを返します。

context

WithValue によって返されるコンテキストのフォーマットはもはやfmtに依存せず、同じ方法で文字列化されません。以前の文字列化に正確に依存するコードに影響を与える可能性があります。

crypto/tls

SSLバージョン3.0(SSLv3)のサポートはGo 1.14で削除される予定です 。SSLv3はTLSに先立つ暗号的に破られた プロトコルであることに注意してください。SSLv3は常にデフォルトで無効になっていましたが、Go 1.12では誤ってサーバー側でデフォルトで有効になっていました。現在は再びデフォルトで無効になっています(SSLv3はクライアント側ではサポートされていませんでした)。Ed25519証明書はTLSバージョン1.2および1.3でサポートされるようになりました。

crypto/x509

Ed25519キーは、RFC 8410 に従って、証明書および証明書要求でサポートされるようになり、ParsePKCS8PrivateKeyMarshalPKCS8PrivateKey 、およびParsePKIXPublicKey 関数でもサポートされます。システムルートが検索されるパスには、Alpine Linux 3.7+のデフォルトの場所をサポートするために/etc/ssl/cert.pemが含まれるようになりました。

database/sql

新しいNullTime 型は、nullである可能性のあるtime.Timeを表します。新しいNullInt32 型は、nullである可能性のあるint32を表します。

debug/dwarf

Data.Type メソッドは、型グラフ内で未知のDWARFタグに遭遇した場合にパニックを起こさなくなりました。代わりに、その型のコンポーネントをUnsupportedType オブジェクトで表します。

errors

新しい関数As は、指定されたエラーのチェーン(ラップされたエラーのシーケンス)内で指定されたターゲットの型に一致する最初のエラーを見つけ、そうであればターゲットをそのエラー値に設定します。新しい関数Is は、指定されたエラー値が別のエラーのチェーン内のエラーと一致するかどうかを報告します。新しい関数Unwrap は、指定されたエラーに対してUnwrapを呼び出した結果を返します(存在する場合)。

fmt

印刷動詞%x%Xは、浮動小数点数と複素数をそれぞれ小文字と大文字の16進表記でフォーマットするようになりました。新しい印刷動詞%Oは、整数を基数8でフォーマットし、0oプレフィックスを出力します。スキャナーは、16進浮動小数点値、数字を区切るアンダースコア、および先頭の0b0oプレフィックスを受け入れるようになりました。詳細については、言語の変更 を参照してください。Errorf 関数には新しい動詞%wがあり、そのオペランドはエラーでなければなりません。Errorfから返されるエラーには、%wのオペランドを返すUnwrapメソッドがあります。

go/scanner

スキャナーは、新しいGo数値リテラル、具体的には0b/0Bプレフィックスを持つバイナリリテラル、0o/0Oプレフィックスを持つ8進リテラル、および16進仮数を持つ浮動小数点数を認識するように更新されました。虚数のサフィックスiは、任意の数値リテラルと共に使用できるようになり、アンダースコアはグループ化のための数字の区切り文字として使用できます。詳細については、言語の変更 を参照してください。

go/types

型チェッカーは、整数シフトの新しいルールに従うように更新されました。詳細については、言語の変更 を参照してください。

html/template

<script> タグを使用する際に、type 属性が “module” に設定されている場合、コードは JavaScript モジュールスクリプト として解釈されるようになりました。

log

新しい Writer 関数は、標準ロガーの出力先を返します。

math/big

新しい Rat.SetUint64 メソッドは、Ratuint64 値に設定します。

Float.Parse では、基数が 0 の場合、読みやすさのために数字の間にアンダースコアを使用できます。詳細は言語の変更 を参照してください。

Int.SetString でも、基数が 0 の場合、読みやすさのために数字の間にアンダースコアを使用できます。詳細は言語の変更 を参照してください。

Rat.SetString は、非10進数の浮動小数点表現を受け入れるようになりました。

math/bits

AddSubMulRotateLeft、および ReverseBytes の実行時間は、入力に依存しないことが保証されるようになりました。

net

Unix システムで resolv.confuse-vc が設定されている場合、DNS 解決に TCP が使用されます。

新しいフィールド ListenConfig.KeepAlive は、リスナーによって受け入れられるネットワーク接続のキープアライブ期間を指定します。このフィールドが 0(デフォルト)の場合、TCP キープアライブが有効になります。無効にするには、負の値を設定してください。

キープアライブタイムアウトによって閉じられた接続での I/O から返されるエラーは、呼び出された場合に true を返す Timeout メソッドを持ちます。これにより、キープアライブエラーを、SetDeadline メソッドや類似のメソッドによって設定された期限切れによるエラーと区別するのが難しくなることがあります。期限を使用し、Timeout メソッドや os.IsTimeout を使用してそれを確認するコードは、キープアライブを無効にするか、errors.Is(syscall.ETIMEDOUT)(Unix システム上)を使用することを検討するかもしれません。これは、キープアライブタイムアウトに対しては true を返し、期限切れタイムアウトに対しては false を返します。

net/http

新しいフィールド Transport.WriteBufferSizeTransport.ReadBufferSize により、Transport の書き込みおよび読み込みバッファのサイズを指定できます。どちらかのフィールドがゼロの場合、デフォルトサイズの 4KB が使用されます。

新しいフィールド Transport.ForceAttemptHTTP2 は、非ゼロの DialDialTLSDialContext 関数または TLSClientConfig が提供された場合に HTTP/2 が有効になるかどうかを制御します。

Transport.MaxConnsPerHost は、HTTP/2 でも正しく動作するようになりました。

TimeoutHandlerResponseWriter は、Pusher インターフェースを実装するようになりました。

StatusCode 103 "Early Hints" が追加されました。

Transport は、Request.Bodyio.ReaderFrom 実装を使用して、ボディの書き込みを最適化するようになりました。

サポートされていない転送エンコーディングに遭遇した場合、http.Server は HTTP 仕様 RFC 7230 セクション 3.3.1 に従って “501 Unimplemented” ステータスを返すようになりました。

新しい Server フィールド BaseContextConnContext により、リクエストおよび接続に提供される Context 値をより細かく制御できるようになりました。

http.DetectContentType は、RAR シグネチャを正しく検出し、RAR v5 シグネチャも検出できるようになりました。

新しい Header メソッド Clone は、レシーバーのコピーを返します。

新しい関数 NewRequestWithContext が追加され、作成された送信 Request の全体のライフタイムを制御する Context を受け入れます。これは、Client.Do および Transport.RoundTrip と共に使用するのに適しています。

Transport は、サーバーがアイドル接続を “408 Request Timeout” レスポンスで正常にシャットダウンしたときにエラーをログに記録しなくなりました。

os

新しい UserConfigDir 関数は、ユーザー固有の設定データに使用するデフォルトディレクトリを返します。

O_APPEND フラグを使用して File を開いた場合、その WriteAt メソッドは常にエラーを返します。

os/exec

Windows では、Cmd の環境は常に親プロセスの %SYSTEMROOT% 値を継承します。ただし、Cmd.Env フィールドに明示的な値が含まれている場合は除きます。

reflect

新しい Value.IsZero メソッドは、Value がその型のゼロ値であるかどうかを報告します。

MakeFunc 関数は、返される値に対して正確な型一致を要求する代わりに、代入変換を許可するようになりました。これは特に、返される型がインターフェース型であるが、実際に返される値がその型を実装する具体的な値である場合に便利です。

runtime

トレースバック、runtime.Caller、および runtime.Callers は、PKG のグローバル変数を初期化する関数を PKG.init として参照するようになり、以前の PKG.init.ializers ではなくなりました。

strconv

strconv.ParseFloatstrconv.ParseInt、および strconv.ParseUint では、基数が 0 の場合、読みやすさのために数字の間にアンダースコアを使用できます。詳細は言語の変更 を参照してください。

strings

新しい ToValidUTF8 関数は、無効な UTF-8 バイトシーケンスの各ランを指定された文字列で置き換えたコピーを返します。

sync

Mutex.LockMutex.UnlockRWMutex.LockMutex.RUnlock、および Once.Do の高速パスは、呼び出し元にインライン化されるようになりました。amd64 の非競合ケースでは、これらの変更により Once.Do は2倍の速さになり、Mutex/RWMutex メソッドは最大10%速くなります。

大きな Pool は、ストップ・ザ・ワールドのポーズ時間を増加させなくなりました。

Pool は、GC のたびに完全に再ポピュレートされる必要がなくなりました。今では、すべてのオブジェクトを解放するのではなく、いくつかのオブジェクトを GC を超えて保持し、Pool のヘビーユーザーに対する負荷のスパイクを減少させます。

syscall

Darwin ビルドから _getdirentries64 の使用が削除され、Go バイナリを macOS App Store にアップロードできるようになりました。

Windows では、新しい ProcessAttributes および ThreadAttributes フィールドが SysProcAttr に導入され、新しいプロセスを作成する際のセキュリティ設定を公開します。

Windows でゼロモードの ChmodEINVAL が返されなくなりました。

Errno 型の値は、os パッケージのエラー値(例えば ErrExist)に対して errors.Is を使用してテストできます。

syscall/js

TypedArrayOf は、バイトスライスと Uint8Array 間でバイトをコピーするために CopyBytesToGo および CopyBytesToJS に置き換えられました。

testing

ベンチマークを実行する際、B.N はもはや丸められません。

新しいメソッド B.ReportMetric により、ユーザーはカスタムベンチマークメトリックを報告し、組み込みメトリックを上書きできます。

テストフラグは、新しい Init 関数で登録されるようになり、この関数はテスト用に生成された main 関数によって呼び出されます。その結果、テストバイナリを実行する際にのみテストフラグが登録され、パッケージ初期化中に flag.Parse を呼び出すパッケージはテストが失敗する可能性があります。

text/scanner

スキャナーは、新しい Go 数値リテラル、特に 0b/0B プレフィックスのバイナリリテラル、0o/0O プレフィックスの8進リテラル、および16進数の仮数を持つ浮動小数点数を認識するように更新されました。また、新しい AllowDigitSeparators モードにより、数字リテラルにアンダースコアを桁区切りとして含めることができます(後方互換性のためデフォルトではオフ)。詳細は言語の変更 を参照してください。

text/template

新しい slice 関数は、最初の引数を後続の引数でスライスした結果を返します。

time

Format および Parse で年の日がサポートされるようになりました。

新しい Duration メソッド Microseconds および Milliseconds は、それぞれの名前の単位の整数カウントとして期間を返します。

unicode

unicode パッケージとシステム全体の関連サポートが Unicode 10.0 から Unicode 11.0 にアップグレードされ、7つの新しいスクリプトと66の新しい絵文字を含む684の新しい文字が追加されました。


スポンサーリンク

共有

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