面向对象
OO是一个很庞大的话题,其实不是三言两语可以搞定的。但是不妨碍我们先进行一个简单的总结:
a. 数据封装: 很简单,就是所有的对象都有属于自己的属性或者成员,而不是依赖于成员变量或者其他局部变量。对于golang来说,就是成言变量和成员方法
b. 继承:直接继承父类的方法或者属性,golang依靠struct的嵌套实现继承,接口也可以继承?应该是吧
c. 多态:
- 多重继承:一个子类可以同时继承多个父类(理解得不是很清晰)
 - 多态效果:父类指针可以调用子类的具体方法(写个例子出来?)
 - 多态产生的要素:有interface的接口,并且有接口定义的方法;有子类去重写interface的接口;有父类的指针指向子类的具体对象
 
正在使用的例子
例子1
package redisimport ...type RedisClient struct {r *redis.Clientlogger logr.Logger}func NewRedisClient(r *redis.Client, logger logr.Logger) *RedisClient {return &RedisClient{r,logger,}}func (c *RedisClient) SetOrUpdateAlarmCode() (bool, error) {return false, nil}func(c *RedisClient)SetOrUpdateTestCode() (bool, error) {return true, nil}
package buptimport ...type RepositoryRedis interface {SetOrUpdateAlarmCode() (bool, error)}func BuptServerPool(redisClient Repository) {redisClient.SetOrUpdateAlarmCode()fmt.Println("bupt")}
package hkustimport ...type RepositoryRedis interface {SetOrUpdateTestCode() (bool, error)}func HkustServerPool(redisClient Repository) {redisClient.SetOrUpdateAlarmCode()fmt.Println("bupt")}
package mainimport ...var redisClient *redis.RedisClientfunc main() {...redisClient = redis.NewRedisClient(rds, logger)go bupt.BuptServerPool(redisClient)go hkust.HkustServerPool(redisClient)}// 1. 这里使用的多重继承,子类redisClient分别实现了bupt.RepositoryRedis和hkust.RepositoryRedis的接口// 2. 但是这里貌似没有产生多态?// 3. 不同的package中定义不同redis接口,符合最小测试原则?我也不知道是什么意思?没有用过
