刚开始接触 Golang 语言,在阅读项目代码时对其中为 func 类型定义成为变量感到疑惑,查阅资料并记录如下。
// A Getter loads data for a key.
type Getter interface {
Get(key string) ([]byte, error)
}
// A GetterFunc implements Getter with a function.
type GetterFunc func(key string) ([]byte, error)
// Get implements Getter interface function
func (f GetterFunc) Get(key string) ([]byte, error) {
return f(key)
}
其中 GetterFunc 为 func 类型,并使用成员函数的写法实现了 Get 方法。这里的关键点在于,为该 func 类型 type GetterFunc 定义成员函数,相当于为该类型的函数实现了方法某个方法。这种写法在我们的上下文中可以理解为:
- 符合 GetterFunc 类型的函数必须实现 Get 方法。
- 该类型函数被创建后自动以成员函数形式实现 Get 方法。
因此,这种写法使得任何 GetterFunc
类型的函数都自动实现了 Getter
接口,因为它实现了符合接口要求的 Get
方法。