Go 1.27リリース:ジェネリックメソッドと新しい標準ライブラリで進化

Go 1.27がリリースされ、言語仕様にジェネリックメソッドのサポートが追加されました。構造体リテラルでのネストフィールド初期化や、関数型推論の一般化も行われています。ツールチェーンではgo fixの新モダナイザーやgo docのバージョン指定が可能に。ランタイムはメモリ割り当てが最適化され、goroutineleakプロファイルが一般公開されました。標準ライブラリには、encoding/json/v2、crypto/mldsa(耐量子署名)、uuid、simdなどが追加されています。
Go 1.27 introduces three notable updates to the language specification: generic methods, struct literal field selectors, and generalized function type inference.
HNでの議論
257- e4m2
言及されていない点: 浮動小数点のパースとフォーマットが、現在はRuss Coxのuscaleアルゴリズムを使用しています。
https://github.com/golang/go/blob/go1.27.0/src/internal/strc...
- teabee89
暗号チームがポスト量子に対して積極的であるのが大好きです。彼らはhttps://pkg.go.dev/crypto/mldsaをリリースしました。メンテナーであるFilippo Valsordaがここ[1]に素晴らしい記事を書き、テック界に十分な品質のポスト量子暗号の展開を始めるよう促しています。
- guessmyname
google/uuid [1] を標準のuuidパッケージ [2] に置き換える、場当たり的なプルリクエストの波に備えてください。
Kubernetesプロジェクトが最初になるでしょう [3]、保証します。
[1] https://pkg.go.dev/github.com/google/uuid
[3] https://github.com/kubernetes/kubernetes/blob/2220c3853a2402...
- Xeoncross
> まず、ジェネリックメソッドがサポートされました
> ジェネリック関数は、明示的な型引数なしで使用できるようになりました
素晴らしい!これは、引数の実際のコピーを持たずに(リクエストボディから)関数の引数をハイドレート/設定できるユニバーサルなハンドラー/コントローラーのジェネリックを作成しようとしたときに遭遇した、人間工学的なコードの問題でした:https://github.com/xeoncross/mid/blob/main/handler.go#L12
- xavdid
これらのリリースノートは大好きですが、Goブログにシンタックスハイライトを追加してほしいと本当に思います。go.devのリンクにたどり着くたびに、コードが視覚的に解析するのが必要以上に少し難しくなることを知っているので、いつも少し驚き、がっかりします。
- pjmlp
構造体リテラルの変更は歓迎ですが、フィールドが重複している場合、バグの原因になる可能性があります。
type Habitat struct {
Burrow string
}
type Gopher struct {
Name string
Burrow string
Habitat
}
これは期待通りに初期化されません。ここでは作為的な例ですが、より複雑なソースコードでは見つけにくいかもしれません。
https://go.dev/play/p/dsY6tK5S8Ie
より良いジェネリックと改善されたSIMDも素晴らしい追加です。
- olingern
> 次に、構造体リテラルのキーは、構造体型の有効なフィールドセレクターであれば何でもよく、ネストされた構造体や埋め込まれた構造体のフィールドを直接初期化できるようになりました
golangで些細なこと以上のものを書くのは久しぶりですが、これは私にとって大きなことのように思えます。つまり、一貫性があり、他の構造体で再利用可能な構造体を定義できるということです。
- tyho
SIMD関連は信じられないほどです。私はそれでとても楽しんでいます。LLMをスカラーからSIMDへのトランスパイラーとして使うことができ、驚くほどうまく機能します。
確かに、SIMDの専門家がアセンブリを書けば、これらの新しい組み込み関数を使うLLMよりも良い仕事ができるかもしれませんが、それでも桁違いに速いです。