Go 1.25の実験的JSONパッケージ:パフォーマンス向上とより厳格な構文

2025-09-10

Go 1.25は、GoのJSONエンコードとデコード機能を向上させる実験的な`encoding/json/v2`と`encoding/json/jsontext`パッケージを導入します。これらは、既存の`encoding/json`パッケージにおける不正確なJSON構文処理、パフォーマンスボトルネック、APIの欠陥などの問題に対処します。改善点には、無効なUTF-8、重複キー、nilのスライス/マップのより厳格な処理が含まれます。ストリーミング処理により、特にアンマーシャリングのパフォーマンスが大幅に向上します。以前のバージョンとほぼ互換性がありますが、`GOEXPERIMENT=jsonv2`を使用してテストし、フィードバックを提供することをお勧めします。

続きを読む
(go.dev)
開発

GoのネイティブFIPS 140-3暗号モジュール:安全でシンプルなソリューション

2025-07-16

Go 1.24以降では、Geomysとの共同開発による新しい暗号モジュールを通じて、FIPS 140-3への準拠をネイティブにサポートするようになりました。CAVP証明書A6650で検証され、CMVPレビュー中のこのモジュールは、規制環境におけるGoユーザーの以前の摩擦点を解消します。シームレスな開発者エクスペリエンスを提供し、最適化されたECDSAとAES-256-CTRベースのNIST DRBGを使用することで、妥協のないセキュリティを誇ります。幅広いプラットフォームとアルゴリズムをサポートし、以前のGo+BoringCryptoよりも優れた機能とセキュリティを実現します。このネイティブモジュールは、Go開発者にとってFIPS 140-3への準拠を達成するための最も簡単で安全な方法です。

続きを読む
(go.dev)

Goジェネリクス:効率的で適応性の高いツリー構造のためのジェネリックインターフェースの巧妙な利用

2025-07-10

この記事では、Goのジェネリックインターフェースの高度な使用方法、特に二分探索木などのデータ構造を構築する際に、自己参照的なジェネリックインターフェースを使用して型制約をエレガントに処理する方法について説明します。ツリー構造を例に、`cmp.Ordered`、カスタム比較関数、自己参照的なジェネリックインターフェースの3つの実装方法を比較します。最後に、順序付き集合の構築のための`comparable`制約の組み合わせと、ポインターレシーバーに起因する複雑さの回避について詳しく説明し、設計においてシンプルさと可読性を優先することを推奨します。

続きを読む
(go.dev)

Goのエラー処理サーガ:構文戦争の終焉

2025-06-03

Goチームは長年にわたり、冗長なGoのエラー処理を改善しようと試みてきましたが、最終的に言語の構文を変更する努力を放棄することにしました。「check/handle」、「try」、そして「?」演算子などの提案は、いずれも広範なコンセンサスを得ることができませんでした。この記事ではこの歴史を詳細に説明し、コンセンサスの欠如、高額な実装コスト、既存のアプローチの妥当性に基づいて決定を説明しています。チームは、構文シュガーを探すよりも、より優れたエラー処理メカニズムとツールに焦点を当てる方が生産的であり、コードの簡潔さよりも実用性と可読性を重視すべきだと主張しています。

続きを読む
(go.dev)
開発

Go 1.25、コアタイプを削除し、言語仕様を簡素化

2025-03-26

Go 1.18はジェネリクスを導入し、それに伴いジェネリックオペランドの処理を簡素化するために「コアタイプ」という概念が導入されました。しかし、これは言語仕様に複雑さを加え、特定の操作の柔軟性を制限していました。Go 1.25はコアタイプを削除し、より明確で簡潔なルールに置き換えることで、言語仕様を簡素化し、より強力なスライス操作や改善された型推論などの将来の言語改善への道を開きます。この変更は既存のGoプログラムの動作には影響しません。

続きを読む
(go.dev)
開発 言語仕様

Go 1.24: Wasm機能の強化 - WASIリアクターとエクスポート関数

2025-02-14

Go 1.24は、`go:wasmexport`ディレクティブとWASIリアクター構築機能の追加により、WebAssembly(Wasm)のサポートを大幅に強化しました。これにより、Go開発者は関数をWasmにエクスポートし、ホストアプリケーションとのシームレスな統合が可能になります。新しいWASIリアクターモードは、再初期化なしで複数のイベントやリクエストに反応できる、継続的に実行されるWasmモジュールを容易にします。Wasmのシングルスレッド性や型制限などの制限はありますが、Go 1.24の改善により、より強力で多用途なGoベースのWasmアプリケーションへの道が開かれます。

続きを読む
(go.dev)
開発

Go Protobufの新しい不透明APIがパフォーマンスと安全性を向上

2024-12-16

Goチームは、既存のOpen Struct APIと共存するGo Protobufの新しい不透明APIをリリースしました。この新しいAPIは、生成されたコードと基盤となるメモリ表現を分離することで、パフォーマンスの向上、メモリ割り当ての削減、遅延デコードなどの最適化を実現します。構造体のフィールドを非表示にし、アクセサメソッドのみを通じてアクセスすることで、ポインタ関連のバグや意図しない共有を防止します。移行には、ハイブリッドAPIの有効化、`open2opaque`ツールの使用、そして不透明APIへの切り替えが含まれます。既存のOpen Struct APIは引き続きサポートされます。

続きを読む
(go.dev)
開発