islishude / blog

my web notes
https://islishude.github.io/blog/
101 stars 15 forks source link

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

Closed islishude closed 5 years ago

islishude commented 5 years ago

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

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

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

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

// 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
}

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

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

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

func NewUserCacher() Cacher {
    return &UserCacher{}
}
islishude commented 5 years ago

mv to https://islishude.github.io/blog/2019/09/04/golang/Go-%E6%98%BE%E5%BC%8F%E5%A3%B0%E6%98%8E%E6%9F%90%E4%B8%AA%E7%B1%BB%E5%9E%8B%E5%AE%9E%E7%8E%B0%E4%BA%86%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3/