Go 1.13 リリースノート

Go 1.13 の紹介

最新の Go リリースであるバージョン 1.13 は、Go 1.12 の 6 か月後にリリースされました。変更点のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装にあります。いつものように、このリリースは Go 1 の 互換性の約束を維持しています。ほとんどすべての Go プログラムが以前と同様にコンパイルおよび実行されると予想されます。

Go 1.13 以降、go コマンドはデフォルトで、Google が実行する Go モジュールミラーおよび Go チェックサムデータベースを使用してモジュールをダウンロードおよび認証します。これらのサービスのプライバシー情報については https://proxy.golang.org/privacy を、これらのサーバーの使用を無効にする方法や別のサーバーを使用する方法を含む構成の詳細については、go コマンドのドキュメントを参照してください。非公開モジュールに依存する場合は、環境を構成するためのドキュメントを参照してください。

言語への変更

数値リテラル提案に基づき、Go 1.13 はより統一的で最新の数値リテラルプレフィックスのセットをサポートします。

符号付きシフトカウント提案に基づき、Go 1.13 は シフトカウント が符号なしである必要があるという制限を削除します。この変更により、<< および >> 演算子のこの(削除された)制限を満たすためだけに導入された多くの人工的な uint 変換の必要性がなくなります。

これらの言語の変更は、コンパイラーへの変更、および対応するライブラリパッケージ go/scannertext/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-archive および pie ビルドモードをサポートするようになりました。

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 ファイルを含むディレクトリが含まれているか、またはその下にある場合、現在のディレクトリが GOPATH/src 内にある場合でも、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 を使用して、プラットフォームに依存しないこれらの変数のデフォルト値を設定できます。

go env -w GOPROXY=direct
go env -w GOSUMDB=off

go get

モジュール対応モードでは、go get-u フラグを指定して、GOPATH モードで go get -u によって更新されるパッケージのセットとより一致する、より小さなモジュールのセットを更新するようになりました。go get -u は、コマンドラインで指定されたモジュールとパッケージを引き続き更新しますが、指定されたパッケージによってインポートされるパッケージを含むモジュールのみを追加で更新します。これは、指定されたパッケージを含むモジュールの推移的なモジュール要件ではなくなります。

特に、go get -u(追加の引数なし)は、現在のディレクトリにあるパッケージの推移的なインポートのみを更新するようになりました。代わりに、メインモジュールによって推移的にインポートされたすべてのパッケージ(テストの依存関係を含む)を更新するには、go get -u all を使用します。

上記の go get -u への変更の結果、go get サブコマンドは、パッケージのロード前に go get を停止させた -m フラグをサポートしなくなりました。-d フラグは引き続きサポートされており、名前付きパッケージの依存関係を構築するために必要なソースコードをダウンロードした後、go get を停止させ続けます。

デフォルトでは、モジュールモードの go get -u は、GOPATH モードのように、テスト以外の依存関係のみをアップグレードします。-t フラグも受け入れるようになりました(GOPATH モードと同様に)。これにより、コマンドラインで指定されたパッケージのテストによってインポートされたパッケージを go get に含めることができます。

モジュール対応モードでは、go get サブコマンドはバージョンサフィックス @patch をサポートするようになりました。@patch サフィックスは、名前付きモジュール、または名前付きパッケージを含むモジュールを、ビルドリストにあるバージョンと同じメジャーバージョンとマイナーバージョンを持つ最高のパッチリリースに更新する必要があることを示します。

バージョンサフィックスなしで go get の引数として渡されたモジュールが、最新のリリースバージョンよりも新しいバージョンで既に必要な場合、その新しいバージョンのままになります。これは、モジュールの依存関係に対する -u フラグの動作と一致します。これにより、プレリリースバージョンからの予期しないダウングレードが防止されます。新しいバージョンサフィックス @upgrade は、この動作を明示的に要求します。@latest は、現在のバージョンに関係なく、最新バージョンを明示的に要求します。

バージョン検証

バージョン管理システムからモジュールを抽出するとき、go コマンドは、要求されたバージョン文字列に対して追加の検証を実行するようになりました。

+incompatible バージョンアノテーションは、モジュール導入前のリポジトリに対するセマンティックインポートバージョンの要件をバイパスします。go コマンドは、そのようなバージョンに明示的な go.mod ファイルが含まれていないことを確認するようになりました。

go コマンドは、擬似バージョンとバージョン管理メタデータ間のマッピングを検証するようになりました。具体的には

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

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

以下のように修正できます。

require github.com/docker/docker e7b5f7dbe98c

これは現在、以下のように解決されます。

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

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

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

これは現在、以下のように解決されます。

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 は、そのディレクトリ内に、パッケージ引数に一致する main パッケージの実行可能ファイルを書き込むようになります。

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.2E3、および 01i は、gofmt を適用すると、0b10100xabcDEF0o6601.2e3、および 1i になります。

godocgo doc

godoc Web サーバーは、メインのバイナリディストリビューションに含まれなくなりました。godoc Web サーバーをローカルで実行するには、最初に手動でインストールしてください。

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 には、最初に エラー値提案 で提案され、関連する問題 で議論された、エラーラッピングのサポートが含まれています。

エラー e は、w を返す Unwrap メソッドを提供することで、別のエラー w を _ラップ_ できます。ew の両方がプログラムで利用可能であるため、プログラムは w に基づいて決定を下すことができますが、ew に追加のコンテキストを提供したり、w を再解釈したりできます。

ラッピングをサポートするために、fmt.Errorf には、ラップされたエラーを作成するための %w 動詞が追加され、errors パッケージに 3 つの新しい関数 ( errors.Unwraperrors.Is、および errors.As) が追加され、ラップされたエラーのアンラッピングと検査が簡単になります。

詳細については、errors パッケージのドキュメントを参照するか、エラー値に関する 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 を除き、デフォルトでは常に無効になっていました。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進数の浮動小数点数、桁区切りアンダースコア、および先頭の0bおよび0oプレフィックスを受け入れるようになりました。詳細については、言語の変更点を参照してください。

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の場合、baseが0の場合、読みやすくするために数字の間にアンダースコアを使用できます。詳細については、言語の変更点を参照してください。

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

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

math/bits

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

net

resolv.confuse-vcが設定されているUnixシステムでは、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の書き込みバッファと読み取りバッファのサイズを指定できます。いずれかのフィールドが0の場合、デフォルトのサイズ4KBが使用されます。

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

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

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

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

Transportは、Request.Bodyio.ReaderFrom実装が利用可能な場合、本体の書き込みを最適化するためにそれを使用するようになりました。

サポートされていない転送エンコーディングに遭遇した場合、http.ServerはHTTP仕様RFC 7230セクション3.3.1で義務付けられているように「501 Not Implemented」ステータスを返すようになりました。

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

http.DetectContentTypeがRAR署名を正しく検出するようになり、RAR v5署名も検出できるようになりました。

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

新しい関数NewRequestWithContextが追加され、作成された送信Requestの全寿命を制御するContextを受け入れます。Client.DoおよびTransport.RoundTripでの使用に適しています。

Transportは、サーバーが"408 Request Timeout"応答を使用してアイドル接続を正常にシャットダウンしたときに、エラーをログに記録しなくなりました。

os

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

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

os/exec

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

reflect

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

MakeFunc関数は、厳密な型の一致を要求する代わりに、戻り値の代入変換を許可するようになりました。これは、返される型がインターフェース型であるにもかかわらず、実際に返される値がその型を実装する具体的な値である場合に特に役立ちます。

runtime

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

strconv

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

strings

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

sync

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

大きなPoolは、stop-the-worldの一時停止時間を増加させなくなりました。

Poolは、すべてのGCの後に完全に再設定する必要がなくなりました。GCを跨いで一部のオブジェクトを保持するようになり、すべてのオブジェクトを解放するのではなく、Poolのヘビーユーザーの負荷スパイクを軽減します。

syscall

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

SysProcAttrにWindows用の新しいProcessAttributesThreadAttributesフィールドが導入され、新しいプロセスを作成する際のセキュリティ設定が公開されるようになりました。

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

Errnoの値は、errors.Isを使用して、ErrExistのようなosパッケージのエラー値に対してテストできます。

syscall/js

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

testing

ベンチマークを実行する場合、B.Nは丸められなくなりました。

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

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

text/scanner

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

text/template

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

time

年の日付は、FormatParseでサポートされるようになりました。

新しいDurationメソッドMicrosecondsMillisecondsは、それぞれ指定された単位の整数カウントとして期間を返します。

unicode

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