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

JavaScriptを有効にしてください

前書き

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

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

Go 1.16の紹介

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

言語の変更

言語に対する変更はありません。

Darwin と iOS

Go 1.16 では、macOS(Apple Silicon とも呼ばれる)上での 64 ビット ARM アーキテクチャのサポートが追加され、GOOS=darwin、GOARCH=arm64 の組み合わせで利用可能になりました。darwin/amd64 ポートと同様に、darwin/arm64 ポートも cgo、内部および外部リンク、c-archive、c-shared、pie ビルドモード、さらにレース検出器をサポートします。

以前は darwin/arm64 として提供されていた iOS ポートは ios/arm64 に名称変更されました。GOOS=ios は、GOOS=android が linux ビルドタグを暗黙的に意味するのと同様に、darwin ビルドタグを意味します。この変更は、gomobile を使用して iOS アプリをビルドしているユーザーにとっては透過的なものとなります。

GOOS=ios の導入により、x_ios.go のようなファイル名は今後 GOOS=ios 用にのみビルドされるようになります。詳細は go help buildconstraint を参照してください。この形式のファイル名を使用している既存のパッケージは、ファイル名の変更が必要となります。

Go 1.16 では、AMD64 ベースの macOS 上で動作する iOS シミュレーターを対象とした ios/amd64 ポートも追加されました。以前は、ios ビルドタグを設定した darwin/amd64 経由で非公式にサポートされていました。iOS および iOS シミュレーター向けのプログラムのビルド方法については、misc/ios/README も参照してください。

Go 1.16 は、macOS 10.12 Sierra 上で動作する最後のリリースとなります。Go 1.17 では、macOS 10.13 High Sierra 以降が必要となります。

NetBSD

Goは、NetBSD上の64ビットARMアーキテクチャ(netbsd/arm64ポート)をサポートするようになりました。

OpenBSD

Goは、OpenBSD上のMIPS64アーキテクチャ(openbsd/mips64ポート)をサポートするようになりました。このポートはまだcgoをサポートしていません。OpenBSD上の64ビットx86および64ビットARMアーキテクチャ(openbsd/amd64およびopenbsd/arm64ポート)では、システムコールがSYSCALL/SVC命令を直接使用するのではなく、libcを通じて行われるようになりました。これにより、将来のOpenBSDバージョンとの前方互換性が確保されます。特に、OpenBSD 6.9以降では、非静的Goバイナリに対してシステムコールをlibcを通じて行う必要があります。

386

Go 1.15のリリースノートで発表された ように、Go 1.16はx87モードコンパイル(GO386=387)のサポートを終了しました。非SSE2プロセッサのサポートは、ソフトフロートモード(GO386=softfloat)を使用して利用可能です。非SSE2プロセッサで実行しているユーザーは、GO386=387をGO386=softfloatに置き換える必要があります。

RISC-V

linux/riscv64ポートは、cgo-buildmode=pieをサポートするようになりました。このリリースには、RISC-Vのパフォーマンス最適化とコード生成の改善も含まれています。

ツール

Goコマンド

モジュール

モジュール対応モードは、現在の作業ディレクトリまたは親ディレクトリにgo.modファイルが存在するかどうかに関係なく、デフォルトで有効になっています。より正確には、GO111MODULE環境変数は現在デフォルトでonになっています。以前の動作に切り替えるには、GO111MODULEをautoに設定します。go buildgo testのようなビルドコマンドは、デフォルトではgo.modgo.sumを変更しなくなりました。代わりに、モジュール要件やチェックサムを追加または更新する必要がある場合はエラーを報告します(-mod=readonlyフラグが使用されたかのように)。モジュール要件やサムを調整するには、go mod tidygo getを使用します。

go installは、バージョン接尾辞を持つ引数を受け入れるようになりました(例: go install example.com/cmd@v1.0.0)。これにより、go installはモジュール対応モードでパッケージをビルドおよびインストールし、現在のディレクトリまたは親ディレクトリにgo.modファイルが存在する場合でも無視します。これは、メインモジュールの依存関係に影響を与えずに実行可能ファイルをインストールするのに便利です。

go installは、上記のようにバージョン接尾辞の有無にかかわらず、モジュールモードでパッケージをビルドおよびインストールする推奨方法になりました。go getは、-dフラグを使用して現在のモジュールの依存関係を調整するために使用し、パッケージをビルドおよびインストールするためのgo getの使用は非推奨です。将来のリリースでは、-dフラグが常に有効になります。

retractディレクティブは、go.modファイルで使用できるようになり、モジュールの特定の公開バージョンが他のモジュールで使用されるべきではないことを示します。モジュールの著者は、重大な問題が発見された場合やバージョンが意図せず公開された場合にバージョンを撤回することができます。

go mod vendorおよびgo mod tidyサブコマンドは、-eフラグを受け入れるようになり、欠落しているパッケージの解決中にエラーが発生しても続行するように指示します。

goコマンドは、メインモジュールのexcludeディレクティブで除外されたモジュールバージョンの要件を無視するようになりました。以前は、goコマンドは除外されたバージョンよりも高い次のバージョンを使用していましたが、そのバージョンは時間とともに変わる可能性があり、再現性のないビルドを引き起こしていました。

モジュールモードでは、goコマンドは非ASCII文字や先頭にドット文字(.)を含むパス要素を含むインポートパスを許可しなくなりました。これらの文字を含むモジュールパスはすでに許可されていませんでした(モジュールパスとバージョン を参照)。したがって、この変更はモジュールサブディレクトリ内のパスにのみ影響します。

ファイルの埋め込み

goコマンドは、新しい//go:embedディレクティブを使用して、静的ファイルやファイルツリーを最終実行可能ファイルの一部として含めることをサポートするようになりました。詳細は、新しいembed パッケージのドキュメントを参照してください。

go test

go testを使用する際、テスト関数の実行中にos.Exit(0)を呼び出すテストは失敗と見なされるようになりました。これにより、テストがos.Exit(0)を呼び出すコードを呼び出し、その結果すべての将来のテストの実行が停止するケースをキャッチするのに役立ちます。TestMain関数がos.Exit(0)を呼び出す場合、それは依然として合格したテストと見なされます。

go testは、-cまたは-iフラグが不明なフラグと一緒に使用されるとエラーを報告します。通常、不明なフラグはテストに渡されますが、-cまたは-iが使用されると、テストは実行されません。

go get

go get -insecureフラグは非推奨であり、将来のバージョンで削除されます。このフラグは、HTTPなどの安全でないスキームを使用してリポジトリからフェッチし、カスタムドメインを解決することを許可し、チェックサムデータベースを使用したモジュールサムの検証をバイパスします。安全でないスキームの使用を許可するには、代わりにGOINSECURE環境変数を使用します。モジュールサムの検証をバイパスするには、GOPRIVATEまたはGONOSUMDBを使用します。詳細はgo help environmentを参照してください。

go get example.com/mod@patchは、example.com/modのいくつかのバージョンがすでにメインモジュールによって要求されていることを要求します。(ただし、go get -u=patchは新たに追加された依存関係でもパッチを適用し続けます。)

GOVCS環境変数

GOVCSは、新しい環境変数で、goコマンドがソースコードをダウンロードするために使用できるバージョン管理ツールを制限します。これは、通常信頼された認証済み環境で使用されるツールに関連するセキュリティ問題を軽減します。デフォルトでは、githgは任意のリポジトリからコードをダウンロードするために使用できます。svnbzr、およびfossilは、モジュールパスまたはパッケージパスがGOPRIVATE環境変数のパターンに一致するリポジトリからのみコードをダウンロードするために使用できます。詳細はgohelpvcs を参照してください。

allパターン

メインモジュールのgo.modファイルがgo 1.16以上を宣言している場合、allパッケージパターンは、メインモジュール内のパッケージまたはテストによって推移的にインポートされるパッケージのみを一致させるようになりました。(メインモジュールによってインポートされたパッケージのテストによってインポートされたパッケージはもはや含まれません。)これは、Go 1.11以降go mod vendorによって保持されるパッケージのセットと同じです。

-toolexecビルドフラグ

-toolexecビルドフラグが指定されて、compileasmのようなツールチェーンプログラムを呼び出す際にプログラムを使用する場合、環境変数TOOLEXEC_IMPORTPATHが現在ビルドされているパッケージのインポートパスに設定されるようになりました。

-iビルドフラグ

go buildgo install、およびgo testで受け入れられる-iフラグは、現在非推奨です。-iフラグは、コマンドラインで指定されたパッケージによってインポートされたパッケージをインストールするようにgoコマンドに指示します。ビルドキャッシュがGo 1.10で導入されて以来、-iフラグはビルド時間に大きな影響を与えなくなり、インストールディレクトリが書き込み可能でない場合にエラーを引き起こします。

listコマンド

-exportフラグが指定されている場合、BuildIDフィールドはコンパイルされたパッケージのビルドIDに設定されるようになりました。これは、go list -exported -f {{.Export}}go tool buildidを実行するのと同等ですが、追加のステップはありません。

-overlayフラグ

-overlayフラグは、ファイルパスの置換セットを含むJSON構成ファイルを指定します。-overlayフラグは、すべてのビルドコマンドおよびgo modサブコマンドで使用できます。これは主に、goplsのようなエディタツールがソースファイルへの未保存の変更の影響を理解するために使用されることを意図しています。構成ファイルは、実際のファイルパスを置換ファイルパスにマッピングし、goコマンドとそのビルドは、実際のファイルパスが置換ファイルパスによって与えられた内容で存在するかのように、または置換ファイルパスが空の場合は存在しないかのように実行されます。

Cgo

cgo ツールは、サイズがGoで表現できる場合でも、C構造体のビットフィールドをGo構造体フィールドに変換しようとしなくなりました。Cビットフィールドがメモリに現れる順序は実装依存であるため、場合によってはcgoツールが静かに不正確な結果を生成していました。

Vet

ゴルーチン内での無効な testing.T 使用に対する新しい警告

vetツールは、テスト中に作成されたゴルーチン内からtesting.TメソッドFatalを無効に呼び出すことについて警告するようになりました。これは、FatalfFailNow、およびSkip{,f,Now}メソッドをtesting.Tテストまたはtesting.Bベンチマークで呼び出す場合にも警告します。これらのメソッドの呼び出しは、作成されたゴルーチンの実行を停止し、Test*またはBenchmark*関数を停止しません。したがって、これらはテストまたはベンチマーク関数を実行しているゴルーチンによって呼び出される必要があります。例えば:

go
1
2
3
4
5
6
7
8
func TestFoo(t *testing.T) {
    go func() {
        if condition() {
            t.Fatal("oops") // これはTestFooではなく内部関数を終了します。
        }
        ...
    }()
}

作成されたゴルーチンからt.Fatal(または類似のメソッド)を呼び出すコードは、t.Errorを使用してテストの失敗を通知し、returnステートメントなどの代替方法を使用してゴルーチンを早期に終了するように書き換える必要があります。前の例は次のように書き換えることができます:

go
1
2
3
4
5
6
7
8
9
func TestFoo(t *testing.T) {
    go func() {
        if condition() {
            t.Error("oops")
            return
        }
        ...
    }()
}

フレームポインタに対する新しい警告

vetツールは、呼び出し規約に反してBPレジスタ(フレームポインタ)を保存および復元せずに破壊するamd64アセンブリについて警告するようになりました。BPレジスタを保持しないコードは、BPをまったく使用しないか、BPを保存および復元して保持するように変更する必要があります。BPを保持する簡単な方法は、フレームサイズをゼロ以外の値に設定することです。これにより、生成されたプロローグとエピローグがBPレジスタを自動的に保持します。例としてCL 248260 を参照してください。

asn1.Unmarshalに対する新しい警告

vetツールは、asn1.Unmarshal に非ポインタまたはnil引数を誤って渡すことについて警告するようになりました。これは、encoding/json.Unmarshal およびencoding/xml.Unmarshal に対する既存のチェックと同様です。

ランタイム

新しいruntime/metrics パッケージは、Goランタイムから実装定義のメトリックを読み取るための安定したインターフェースを導入します。これは、既存のruntime.ReadMemStatsdebug.GCStats などの関数を置き換え、より一般的で効率的です。詳細はパッケージドキュメントを参照してください。

GODEBUG環境変数をinittrace=1に設定すると、各パッケージの初期化に対して実行時間とメモリ割り当てを要約した1行を標準エラーに出力するようになりました。このトレースは、Goの起動パフォーマンスのボトルネックやリグレッションを見つけるのに使用できます。GODEBUGドキュメント にフォーマットが記載されています。

Linuxでは、ランタイムはメモリをオペレーティングシステムに迅速に解放することをデフォルトとするようになりました(MADV_DONTNEEDを使用)。これにより、プロセスレベルのメモリ統計(RSSなど)がGoプロセスによって使用されている物理メモリの量をより正確に反映するようになります。現在、メモリ監視の動作を改善するためにGODEBUG=madvdontneed=1を使用しているシステムは、この環境変数を設定する必要がなくなりました。

Go 1.16は、レースデテクタとGoメモリモデル の間の不一致を修正しました。レースデテクタは、メモリモデルのチャネル同期ルールにより正確に従うようになりました。その結果、デテクタは以前見逃していたレースを報告する可能性があります。

コンパイラ

コンパイラは、ラベルなしのforループ、メソッド値、および型スイッチを持つ関数をインライン化できるようになりました。インライナーは、インライン化が可能なより多くの間接呼び出しを検出することもできます。

リンカー

このリリースには、Goリンカーの追加の改善が含まれており、リンカーのリソース使用量(時間とメモリの両方)を削減し、コードの堅牢性/保守性を向上させています。これらの変更は、Goリンカーをモダン化する ための2リリースプロジェクトの後半を形成しています。1.16のリンカーの変更は、1.15の改善をすべてのサポートされているアーキテクチャ/OSの組み合わせに拡張します(1.15のパフォーマンス改善は主にELFベースのOSとamd64アーキテクチャに焦点を当てていました)。代表的な大規模Goプログラムのセットでは、リンクは1.15よりも20-25%高速で、linux/amd64では平均で5-15%少ないメモリを必要とし、他のアーキテクチャやOSではより大きな改善が見られます。ほとんどのバイナリは、より積極的なシンボルプルーニングの結果としても小さくなっています。

Windowsでは、go build -buildmode=c-sharedはデフォルトでWindows ASLR DLLを生成するようになりました。ASLRは--ldflags=-aslr=falseで無効にできます。

標準ライブラリ

埋め込みファイル

新しいembed パッケージは、新しい//go:embedディレクティブ を使用して、コンパイル中にプログラムに埋め込まれたファイルにアクセスする機能を提供します。

ファイルシステム

新しいio/fs パッケージは、ファイルの読み取り専用ツリーの抽象化であるfs.FS インターフェースを定義します。標準ライブラリパッケージは、適切にインターフェースを利用するように適応されています。インターフェースのプロデューサー側では、新しいembed.FS 型がfs.FSを実装しており、zip.Reader も同様です。新しいos.DirFS 関数は、オペレーティングシステムファイルのツリーによってバックアップされたfs.FSの実装を提供します。コンシューマー側では、新しいhttp.FS 関数がfs.FShttp.FileSystem に変換します。また、html/template およびtext/template パッケージのParseFS 関数とメソッドは、fs.FSからテンプレートを読み取ります。fs.FSを実装するコードをテストするために、新しいtesting/fstest パッケージは、一般的な間違いをチェックして報告するTestFS 関数を提供します。また、fs.FS実装を受け入れるコードをテストするのに便利な、シンプルなインメモリファイルシステム実装であるMapFS も提供します。

io/ioutilの非推奨化

io/ioutil パッケージは、定義が不十分で理解しにくいコレクションであることが判明しました。パッケージが提供するすべての機能は他のパッケージに移動されました。io/ioutilパッケージは残り、以前と同様に動作し続けますが、新しいコードではio およびos パッケージの新しい定義を使用することをお勧めします。io/ioutilによってエクスポートされた名前の新しい場所のリストは次のとおりです:

ライブラリの小さな変更

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

archive/zip

新しいReader.Open メソッドは、fs.FS インターフェースを実装しています。

crypto/dsa

crypto/dsa パッケージは現在非推奨です。issue #40337 を参照してください。

crypto/hmac

New は、ハッシュ生成関数への個別の呼び出しが新しい値を返すのに失敗した場合にパニックを起こすようになりました。以前は、動作が未定義であり、無効な出力が生成されることがありました。

crypto/tls

閉じているまたは閉じたTLS接続でのI/O操作は、新しいnet.ErrClosed エラーを使用して検出できるようになりました。典型的な使用法はerrors.Is(err, net.ErrClosed)です。Conn.Closeで「close notify」アラートを送信する前にデフォルトの書き込み期限が設定され、無期限にブロックされるのを防ぎます。クライアントは、サーバーがクライアントによって広告されたリストにないALPNプロトコルを選択した場合、ハンドシェイクエラーを返すようになりました。サーバーは、クライアントまたはサーバーのいずれかがAESハードウェアサポートを持たない場合、AES-GCM暗号スイートよりも他の利用可能なAEAD暗号スイート(ChaCha20Poly1305など)を優先するようになりました。ただし、Config.PreferServerCipherSuitesConfig.CipherSuitesの両方が設定されている場合を除きます。クライアントは、AES-GCM暗号スイートの優先順位を示さない場合、AESハードウェアサポートを持たないと見なされます。Config.Cloneは、レシーバーがnilの場合、パニックを起こすのではなくnilを返すようになりました。

crypto/x509

GODEBUG=x509ignoreCN=0フラグはGo 1.17で削除されます。これは、X.509証明書のCommonNameフィールドを、Subject Alternative Namesが存在しない場合にホスト名として扱うレガシー動作を有効にします。ParseCertificateおよびCreateCertificateは、DNSNames、EmailAddresses、およびURIsフィールドの文字列エンコーディング制限を強制するようになりました。これらのフィールドには、ASCII範囲内の文字を含む文字列のみが含まれることができます。CreateCertificateは、生成された証明書の署名を署名者の公開鍵を使用して検証するようになりました。署名が無効な場合、エラーが返され、不正な証明書は返されません。DSA署名の検証はもはやサポートされていません。DSA署名の生成はサポートされていなかったことに注意してください。issue #40337 を参照してください。Windowsでは、Certificate.Verifyは、プラットフォーム証明書検証者によって構築されたすべての証明書チェーンを返すようになりました。新しいSystemRootsError.Unwrapメソッドは、errorsパッケージ関数を通じてErrフィールドにアクセスできるようにします。Unixシステムでは、crypto/x509パッケージは、システム証明書プールのコピーを格納する方法がより効率的になりました。少数のルートのみを使用するプログラムは、約0.5メガバイト少ないメモリを使用します。

debug/elf

より多くのDT およびPT 定数が追加されました。

encoding/asn1

UnmarshalおよびUnmarshalWithParamsは、引数がポインタでないかnilの場合にパニックを起こすのではなくエラーを返すようになりました。この変更は、encoding/jsonなどの他のエンコーディングパッケージの動作と一致しています。

encoding/json

MarshalUnmarshal、および関連機能によって理解されるJSON構造体フィールドタグは、Go構造体フィールドのJSONオブジェクト名内にセミコロン文字を許可するようになりました。

encoding/xml

エンコーダーは、XML仕様によって予約されているxmlで始まる名前空間プレフィックスを使用しないように常に注意を払ってきました。仕様により厳密に従うために、そのチェックは大文字小文字を区別しなくなり、XMLXmLなどで始まるプレフィックスも避けられるようになりました。

flag

新しいFunc関数は、Valueインターフェースを実装する軽量な代替手段として、関数を呼び出すことによって実装されたフラグを登録することを可能にします。

go/build

Package構造体には、パッケージ内の//go:embedディレクティブに関する情報を報告する新しいフィールドがあります:EmbedPatternsEmbedPatternPosTestEmbedPatternsTestEmbedPatternPosXTestEmbedPatternsXTestEmbedPatternPosPackageフィールドIgnoredGoFilesには、常に無視される「_」または「.」で始まるファイルは含まれなくなります。IgnoredGoFilesは、ビルド制約のために無視されたファイル用です。新しいPackageフィールドIgnoredOtherFilesには、ビルド制約のために無視された非Goファイルのリストがあります。

go/build/constraint

新しいgo/build/constraintパッケージは、ビルド制約行を解析します。これは、元の// +build構文と、Go 1.17で導入される//go:build構文の両方を解析します。このパッケージは、Go 1.16でビルドされたツールがGo 1.17のソースコードを処理できるように存在します。ビルド制約構文と//go:build構文への移行計画の詳細については、https://golang.org/design/draft-gobuild を参照してください。//go:build行はGo 1.16ではサポートされておらず、まだGoプログラムに導入されるべきではありません。

html/template

新しいtemplate.ParseFS関数とtemplate.Template.ParseFSメソッドは、template.ParseGlobおよびtemplate.Template.ParseGlobと似ていますが、テンプレートをfs.FSから読み取ります。

io

パッケージは現在、ReadSeekCloserインターフェースを定義しています。パッケージは現在、DiscardNopCloser、およびReadAllを定義しており、io/ioutilパッケージの同じ名前のものの代わりに使用されます。

log

新しいDefault関数は、デフォルトのLoggerへのアクセスを提供します。

log/syslog

Writerは、カスタムUnixドメインソケットにログを記録する際に、ホスト名を省略し、短いタイムスタンプを使用するローカルメッセージ形式を使用するようになりました。これは、デフォルトのログソケットで既に使用されている形式と一致します。

mime/multipart

ReaderReadFormメソッドは、最大int64値を制限として渡された場合にフォームデータを拒否しなくなりました。

net

閉じたネットワーク接続でのI/O、またはI/Oが完了する前に閉じられたネットワーク接続でのI/Oの場合、新しいErrClosedエラーを使用して検出できるようになりました。典型的な使用法はerrors.Is(err, net.ErrClosed)です。以前のリリースでは、このケースを確実に検出する唯一の方法は、Errorメソッドによって返される文字列を「use of closed network connection」と一致させることでした。以前のGoリリースでは、LinuxシステムでのデフォルトのTCPリスナーバックログサイズは、/proc/sys/net/core/somaxconnによって65535に制限されていました。Linuxカーネルバージョン4.1以降では、最大値は4294967295です。Linuxでは、/etc/nsswitch.confが欠落している場合、ホスト名のルックアップはDNSを使用せずに/etc/hostsを最初にチェックするようになりました。これは、muslベースのシステムで一般的であり、Goプログラムがこれらのシステム上のCプログラムの動作と一致するようにします。

net/http

net/httpパッケージでは、StripPrefixの動作が変更され、リクエストURLのRawPathフィールドからもプレフィックスを削除するようになりました。過去のリリースでは、Pathフィールドのみがトリムされていたため、リクエストURLにエスケープされた文字が含まれている場合、URLはPathRawPathフィールドが一致しないように変更されていました。Go 1.16では、StripPrefixは両方のフィールドをトリムします。リクエストURLのプレフィックス部分にエスケープされた文字が含まれている場合、ハンドラーは404を返し、以前の動作であるPath/RawPathペアが一致しない状態で基礎となるハンドラーを呼び出すことはありません。net/httpパッケージは、"Range": "bytes=--N"の形式のHTTPレンジリクエストを拒否するようになりました。ここで、"-N"は負のサフィックス長です(例:"Range": "bytes=--2")。現在、416「Range Not Satisfiable」応答を返します。SameSiteDefaultModeで設定されたクッキーは、現在の仕様に従って動作するようになりました(属性は設定されません)。Clientは、空のボディを持つPATCHリクエストで明示的なContent-Length: 0ヘッダーを送信するようになり、既存のPOSTおよびPUTの動作と一致します。ProxyFromEnvironment関数は、HTTPS_PROXYが設定されていない場合、https:// URLに対してHTTP_PROXY環境変数の設定を返さなくなりました。Transport型には、新しいフィールドGetProxyConnectHeaderがあり、CONNECTリクエスト中にプロキシに送信するヘッダーを返す関数を設定できます。実質的に、GetProxyConnectHeaderは既存のフィールドProxyConnectHeaderの動的バージョンです。GetProxyConnectHeaderがnilでない場合、ProxyConnectHeaderは無視されます。新しいhttp.FS関数は、fs.FShttp.FileSystemに変換します。

net/http/httputil

ReverseProxyは、ストリーミングされた応答をプロキシする際に、バッファリングされたデータをより積極的にフラッシュするようになりました。

net/smtp

ClientMailメソッドは、UTF-8でエンコードされたアドレスを示すSMTPUTF8ディレクティブをサポートするサーバーに送信するようになりました。

os

Process.Signalは、プロセスがすでに終了している場合、エクスポートされていないerrFinishedの代わりにErrProcessDoneを返すようになりました。パッケージは、新しい型DirEntryfs.DirEntryのエイリアスとして定義しています。新しいReadDir関数と新しいFile.ReadDirメソッドは、ディレクトリの内容をDirEntryのスライスに読み取るために使用できます。File.Readdirメソッド(ディレクトリの小文字のdに注意)はまだ存在し、FileInfoのスライスを返しますが、ほとんどのプログラムではFile.ReadDirに切り替える方が効率的です。パッケージは現在、CreateTempMkdirTempReadFile、およびWriteFileを定義しており、io/ioutilパッケージで定義された関数の代わりに使用されます。型FileInfoFileMode、およびPathErrorは、io/fsパッケージの同じ名前の型のエイリアスになりました。osパッケージの関数シグネチャは、io/fsパッケージの名前を参照するように更新されました。これは既存のコードには影響しないはずです。新しいDirFS関数は、オペレーティングシステムファイルのツリーによってバックアップされたfs.FSの実装を提供します。

os/signal

新しいNotifyContext関数は、特定のシグナルの到着時にキャンセルされるコンテキストを作成することを可能にします。

path

Match関数は、パターンの一致しない部分に構文エラーがある場合にエラーを返すようになりました。以前は、一致しない場合に早期に戻り、そのためパターンの後続の構文エラーを報告しませんでした。

path/filepath

新しい関数WalkDirは、Walkに似ていますが、通常はより効率的です。WalkDirに渡される関数は、fs.DirEntryを受け取ります。Walk関数がos.FileInfoを受け取ると記憶している人のために説明すると、os.FileInfoは現在fs.FileInfoのエイリアスです。MatchおよびGlob関数は、パターンの一致しない部分に構文エラーがある場合にエラーを返すようになりました。以前は、一致しない場合に早期に戻り、そのためパターンの後続の構文エラーを報告しませんでした。

reflect

Zero関数は、割り当てを回避するように最適化されました。返されたValueを別のValue==またはDeepEqualを使用して誤って比較するコードは、以前のGoバージョンで得られた結果と異なる結果を得る可能性があります。reflect.Value のドキュメントは、2つのValueを正しく比較する方法を説明しています。

runtime/debug

SetPanicOnFaultが有効な場合に使用されるruntime.Error値には、Addrメソッドが存在する場合があります。そのメソッドが存在する場合、フォールトを引き起こしたメモリアドレスを返します。

strconv

ParseFloatは、Eisel-Lemireアルゴリズム を使用するようになり、パフォーマンスが最大2倍向上しました。これにより、encoding/json のようなテキスト形式のデコードも高速化される可能性があります。

syscall

NewCallbackおよびNewCallbackCDeclは、複数のサブuintptrサイズの引数を連続して持つコールバック関数を正しくサポートするようになりました。これにより、小さな引数間の手動パディングを排除するためにこれらの関数の使用を変更する必要がある場合があります。WindowsのSysProcAttrには、新しいNoInheritHandlesフィールドがあり、新しいプロセスを作成する際にハンドルの継承を無効にします。WindowsのDLLErrorには、基になるエラーをアンラップするためのUnwrapメソッドがあります。Linuxでは、SetgidSetuid、および関連する呼び出しが実装されました。以前は、syscall.EOPNOTSUPPエラーを返していました。Linuxでは、新しい関数AllThreadsSyscallおよびAllThreadsSyscall6を使用して、プロセス内のすべてのGoスレッドでシステムコールを行うことができます。これらの関数は、cgoを使用しないプログラムでのみ使用できます。プログラムがcgoを使用している場合、常にsyscall.ENOTSUPを返します。

testing/iotest

新しいErrReader関数は、常にエラーを返すio.Readerを返します。新しいTestReader関数は、io.Readerが正しく動作するかどうかをテストします。

text/template

アクションデリミタ内の改行文字が許可されるようになり、アクションが複数行にわたることができるようになりました。新しいtemplate.ParseFS関数とtemplate.Template.ParseFSメソッドは、template.ParseGlobおよびtemplate.Template.ParseGlobと似ていますが、テンプレートをfs.FSから読み取ります。

text/template/parse

新しいCommentNodeがパースツリーに追加されました。パースツリーのModeフィールドは、それにアクセスすることを可能にします。

time/tzdata

スリムなタイムゾーンデータ形式が、$GOROOT/lib/time/zoneinfo.zipおよびこのパッケージに埋め込まれたコピーのタイムゾーンデータベースに使用されるようになりました。これにより、タイムゾーンデータベースのサイズが約350 KB削減されます。

unicode

unicodeパッケージとシステム全体の関連サポートは、Unicode 12.0.0からUnicode 13.0.0 にアップグレードされました。これにより、4つの新しいスクリプトと55の新しい絵文字を含む5,930の新しい文字が追加されました。Unicode 13.0.0は、プレーン3(U+30000-U+3FFFF)を三次表意文字プレーンとして指定しています。


スポンサーリンク

共有

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