接口型函数
最近在写极客兔兔的GeeCache这个小项目,在里面遇到了一段不太理解的代码,
1 | type Getter interface { |
结合兔兔的讲解,写一篇博客
本质是实现多态
接口只有一个方法,为什么不直接使用GetterFunc作为参数传进参数?
1 | func GetFromSource(fn GetterFunc, key string) []byte |
这意味着它只能接受函数,而不能接受一个更复杂的类型,比如一个带有内部连接状态的数据库连接对象DB
我只能这样用
1 | GetFromSource(func(key string) ([]byte, error){ |
而不能使用
1 | type DB struct { ... } |
如果使用接口型函数
1 | type Getter interface { |
现在就可以传函数
1 | GetFromSource(GetterFunc(func(key string) ([]byte, error) { |
传结构体
1 | GetFromSource(new(DB), "hello") |
传普通函数(转换为GetterFunc)
1 | func fetch(key string) ([]byte, error) { ... } |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 EurekaYu!
评论

