封裝庫的接口強制實現(xiàn)

我們實現(xiàn)分層代碼的時候習慣使用一個小寫的結(jié)構(gòu)體去實現(xiàn)當前層次對外的接口,外層調(diào)用本層方法只能去調(diào)用實例化方法獲得一個接口對象。簡單如下:


type CouponDaoEr interface {
    GetCouponList(param *do.CouponParam, data *[]app.V6UserCouponLog, 
userId int, res *do.CouponList) error
}

func NewCouponDaoEr(dbApp *xorm.Engine) CouponDaoEr {
    return &couponDao{
        dbApp: dbApp,
    }
}

type couponDao struct {
    dbApp *xorm.Engine
}

// 獲取優(yōu)惠券列表
func (c *couponDao) GetCouponList(param *do.CouponParam, data *[]app.V6UserCouponLog,
    userId int, res *do.CouponList) error {
    return c.getCouponList(param, data, userId, res)
}

不用關注細節(jié),這里實際上就是有一個對外的結(jié)構(gòu)體,外部調(diào)用NewCouponDaoer方法 獲取到一個接口:couponDaoer , 實際上從代碼規(guī)范上來說我們必須認定couponDao 結(jié)構(gòu)體必須實現(xiàn)該接口,這是必須的。我們?nèi)绻@里是一個基本庫的話,那么我們處理過程中別人修改你的方法,不小心把改繼承的方法改掉了,之前調(diào)用就會報錯。

這里正確方法應該是強制couponDao 實現(xiàn)Daoer方法

var _ CouponDaoEr = (*couponDao)(nil)
var _ CouponDaoEr = new(couponDao)
  • 第一種寫法是:運行時檢測
  • 第二種new寫法:編譯時檢測

這個寫法可以對我們基礎庫的擴展有非常大的幫助,所以特別說明一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容