Skip to content

Goのreflectだけでメソッドを追加する

reflect パッケージでは構造体のフィールド追加はできるけれど、メソッドを新たに追加する関数は見当たらない。なので動的にインターフェイスを満たす型を生成するのは不可能だと思っていたが、ovechkin-dm/go-dynoというパッケージが動的なメソッド追加を実現していた。以下では greeter の型が Greeter となる。

greeter, err := dyno.Dynamic[Greeter](proxyHandler.Handle)

これはどうやっているのかというと、本質はproxy/proxy.goCreate にあって、reflectunsafe を使ってABIを自分で構築しているようだった。

go-dyno はおそらく同作者のovechkin-dm/mockioを作るために用意されているのだろう。