GoのジェネリクスはGCシェイプ・ステンシリングで実装されている
GC shape stenciling in Go generics

Goのジェネリクスは、フルモノモーフィゼーション(RustやC++)と型消去(Java)の中間的なアプローチを採用しています。GCシェイプ・ステンシリングと呼ばれるこの方式では、型をGCシェイプ(サイズ、アラインメント、ポインタの有無)に基づいてグループ化し、同じシェイプの型はコンパイル済みコードを共有します。例えば、*Userと*Orderはどちらもポインタ型なので、同じ関数本体を共有します。しかし、正確な型が必要な操作(メソッド呼び出し、インターフェース変換、型アサーションなど)は、ディクショナリと呼ばれる隠し引数を使って実行時に解決されます。この記事では、実際のGoコードとシンボルテーブルの出力を交えながら、この実装戦略の仕組みと、コンパイル時間やバイナリサイズへの影響を解説します。
GCシェイプ・ステンシリングでは、型引数をGCシェイプに基づいてグループ化し、同じシェイプの型はコンパイル済みコードを共有します。