3

埋め込み型では、型が埋め込み型を介して特定のインターフェイスを実装している場合、または埋め込み型の実装をオーバーライドするメソッドの独自の実装がある場合、パッケージ リフレクトの使用をどのように区別できますか?

具体例 ( play.golang.org の完全な例):

type A string

func (a A) String() string {
    return string(a)
}

type A1 struct {
    A
}

type A2 struct {
    A
}

func (a A2) String() string {
    return strings.ReplaceAll(string(a.A), " ", "_")
}

var (
    a1 A1
    a2 A2
)

を検査a1a2て使用するとき、メソッドinが に直接アタッチされているのに、メソッドinの実装が継承reflectされていることをどのように確認できますか?StringA1StringA2A2

と比較reflect.TypeOf(a1).MethodByName("String").Funcしてみましreflect.TypeOf(a1).Field(0).Type.MethodByName("String").Funcたが、2つの値が異なります。

注: 私の実際の使用例は、A が json.Marshaler を実装する場合、A を埋め込む型に json.Marshaler の独自の実装があることを強制する単体テストを作成することです。

4

0 に答える 0