Go: 显式声明某个类型实现了一个接口

Sep 04 2019 Golang

Go 中没有面向对象的 implements 关键字,一个类型实现了一个接口是隐式的。

其实显式声明主要为了让编译器提前判断接口是否被实现而已。

所以在 Go 中还是有很多方式的。

如下所示 *UserCacher 实现了 Cacher 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Cacher key-value for string
type Cacher interface {
Get(string) (string, error)
Set(string, string) error
}

// UserCacher users cacher
type UserCacher struct {
}

// Get value by key
func (u *UserCacher) Get(key string) (string, error) {
return "", nil
}

// Set value by key
func (u *UserCacher) Set(key, value string) error {
return nil
}

为了让编译器提前判断的话,可这样做:

1
2
// Verify that *UserCacher implements Cacher
var _ Cacher = (*UserCacher)(nil)

或者在一个“构造函数”内实现:

1
2
3
func NewUserCacher() Cacher {
return &UserCacher{}
}