表題が全てです。たとえば以下のように定義されている I
interfaceのモックをmockgenのreflect modeで生成するとエラーになる。
package generic import ( "go.uber.org/mock/sample/imp1" ) type V[T any] map[string]T type I interface { X() V[imp1.Imp1] }
エラーメッセージをよく見ると、X
メソッドの返り値の型が generic.V[imp1.Imp1]
ではなく generic.V[go.uber.org/mock/sample/imp1.Imp1]
という型になっていておかしい。これは reflect.Type
型の Name()
メソッドがこういう文字列を返すことに起因している。
このissueでも言及されているように、2023/10/3 時点ではGoの reflect.Type
からジェネリックな型の引数の情報を取得するインタフェースは提供されていない。proposalはある。
type VImp1 V[imp1.Imp1]
のように型を定義してあげれば回避できる。あとはreflect modeではなくsource modeだとちゃんと動く。
ここで緊急アンケート
みなさまはGoのinterfaceのモックに何を使っていますか?