golang接口的封装

一、声明接口

1 type Result interface {
2     LastInsertId() (int64, error)
3     RowsAffected() (int64, error)
4 }

二、实现接口,这里却将接口作为成员变量,进而将接口的实现转换为接口的调用,仅仅是封装了接口,实际上并没有真的实现,而是坐等别人去实现

 1 //    一把锁
 2 //    一个结果集的假接口实现,表示需要的功能,让他人来具体实现。假装实现了某个接口,其实是调用了内部接口的对应方法
 3 type driverResult struct {
 4     sync.Locker
 5     resi        driver.Result
 6 }
 7 //    Result 是对已执行 SQL 命令的总结,。
 8 //    LastInsertId() 会返回一个由数据库生成的整数, 这个整数是对命令的响应。 在插入一个新的数据行时, 这个整数通常来源于数据表中的自增数据列。
 9 //    并不是所有数据库都支持这个特性, 并且各个数据库在实现这个特性时使用的语句也会有所不同。
10 //    RowsAffected() 返回受到更新、插入或者删除操作影响的行数量, 并不是所有数据库或者所有数据库驱动都支持这个特性。
11 type Result interface {
12     LastInsertId() (int64, error)
13     RowsAffected() (int64, error)
14 }
15 
16 func (dr driverResult) LastInsertId() (int64, error) {
17     dr.Lock()
18     defer dr.Unlock()
19     return dr.resi.LastInsertId()
20 }
21 
22 func (dr driverResult) RowsAffected() (int64, error) {
23     dr.Lock()
24     defer dr.Unlock()
25     return dr.resi.RowsAffected()
26 }

猜你喜欢

转载自www.cnblogs.com/igoodful/p/11520827.html
今日推荐