小编典典

具有嵌入式匿名接口的结构的含义?

go

sort 包:

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

...

type reverse struct {
    Interface
}

Interfacestruct中的匿名接口是什么意思reverse


阅读 233

收藏
2020-07-02

共1个答案

小编典典

通过这种方式,反向实现了sort.Interface,我们可以覆盖特定的方法而不必定义所有其他方法

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

请注意,这里是如何交换(j,i)而不是交换的(i,j),这也是为struct声明的唯一方法,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. Reversesort.Interface吗?添加另一种方法?
  2. 创建另一个ReverseInterface?
  3. …?

任何此类更改都需要跨数千个要使用标准反向功能的软件包的许多行代码。

2020-07-02