Go 中没有面向对象的 implements 关键字,一个类型实现了一个接口是隐式的。
其实显式声明主要为了让编译器提前判断接口是否被实现而已。
所以在 Go 中还是有很多方式的。
如下所示 *UserCacher 实现了 Cacher 接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| type Cacher interface { Get(string) (string, error) Set(string, string) error }
type UserCacher struct { }
func (u *UserCacher) Get(key string) (string, error) { return "", nil }
func (u *UserCacher) Set(key, value string) error { return nil }
|
为了让编译器提前判断的话,可这样做:
1 2
| var _ Cacher = (*UserCacher)(nil)
|
或者在一个“构造函数”内实现:
1 2 3
| func NewUserCacher() Cacher { return &UserCacher{} }
|