1. ホーム
  2. go

[解決済み] 匿名インターフェイスを埋め込んだ構造体の意味?

2023-01-09 13:14:30

質問

sort パッケージを使用します。

type Interface interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

...

type reverse struct {
    Interface
}

匿名インターフェースの意味 Interface 構造体の中の reverse ?

どのように解決するのですか?

このようにリバースは sort.Interface を実装しており、特定のメソッドをオーバーライドすることができます。 をオーバーライドすることができます。

type reverse struct {
        // This embedded Interface permits Reverse to use the methods of
        // another Interface implementation.
        Interface
}

ここで、どのように入れ替わるかに注目してください。 (j,i) の代わりに (i,j) であり、またこれは構造体である reverse であっても reverse インプリメント sort.Interface

// Less returns the opposite of the embedded implementation's Less method.
func (r reverse) Less(i, j int) bool {
        return r.Interface.Less(j, i)
}

このメソッドの内部で渡された構造体が何であれ、それを新しい reverse 構造体に変換します。

// Reverse returns the reverse order for data.
func Reverse(data Interface) Interface {
        return &reverse{data}
}

このやり方ができなかったら、どうすればいいかと考えたときに、真価が発揮されるのです。

  1. 別のものを追加する Reverse メソッドを sort.Interface ?
  2. 別のReverseInterfaceを作成しますか?
  3. ... ?

このいずれの変更も、標準のリバース機能を使用したい何千ものパッケージにわたって、さらに多くの多くのコード行を必要とするでしょう。