本篇內(nèi)容主要講解“Go Struct初始化風(fēng)格的抉擇方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Go Struct初始化風(fēng)格的抉擇方法是什么”吧!
創(chuàng)新互聯(lián)建站主要企業(yè)基礎(chǔ)官網(wǎng)建設(shè),電商平臺(tái)建設(shè),移動(dòng)手機(jī)平臺(tái),微信小程序開發(fā)等一系列專為中小企業(yè)按需求定制設(shè)計(jì)產(chǎn)品體系;應(yīng)對(duì)中小企業(yè)在互聯(lián)網(wǎng)運(yùn)營的各種問題,為中小企業(yè)在互聯(lián)網(wǎng)的運(yùn)營中保駕護(hù)航。
三種代碼風(fēng)格
風(fēng)格一
在 Go 中我們常?!胺祷貙?shí)現(xiàn)(struct),依賴接口”,其實(shí)就是在函數(shù)返回的時(shí)候我們返回一個(gè)具體的實(shí)現(xiàn),函數(shù)的參數(shù)或者是 Struct 的成員部分我們依賴接口,這個(gè)風(fēng)格看起來是違背了這個(gè)原則的
// repository 存儲(chǔ)庫 type repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) domain.IAzRepository { return &repository{db: db} }
風(fēng)格二
這個(gè)風(fēng)格返回了實(shí)現(xiàn),并且由于并沒有導(dǎo)出看起來也具有封裝的特性,但是如果你運(yùn)行 golint 你就會(huì)發(fā)現(xiàn)會(huì)拋出錯(cuò)誤,因?yàn)檫@么寫,會(huì)導(dǎo)致我們用導(dǎo)出的方法將沒有導(dǎo)出 struct 給暴露了出去
// repository 存儲(chǔ)庫 type repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) *repository { return &repository{db: db} }
風(fēng)格三
這個(gè)寫法的主要問題是,由于 Repository 被導(dǎo)出,所以在外部其他的包中就可以直接通過 &Repository{} 進(jìn)行初始化,這樣初始化之后使用就會(huì)導(dǎo)致 panic,因?yàn)槌蓡T函數(shù)是一個(gè) nil 指針
// Repository 存儲(chǔ)庫 type Repository struct { db *gorm.DB } // NewAZRepository NewAZRepository func NewAZRepository(db *gorm.DB) *Repository { return &Repository{db: db} }
選擇
選擇總是困難的,帶著這個(gè)問題我咨詢了同組的同事還有好幾個(gè) Go 語言交流群的同學(xué),其中大部分都會(huì)選擇風(fēng)格三,小部分會(huì)選擇風(fēng)格一,風(fēng)格二幾乎沒有人選擇。最后我選什么呢?
最后我的選擇是風(fēng)格一,這是針對(duì)場(chǎng)景來的,因?yàn)槲覀兊倪@個(gè)包其實(shí)不希望其他包直接依賴實(shí)現(xiàn),因?yàn)楹罄m(xù)有可能隨著發(fā)展被單獨(dú)拆分成一個(gè)微服務(wù)或者是需要更換存儲(chǔ)庫,如果外部有包直接依賴 repository 會(huì)導(dǎo)致后續(xù)的重構(gòu)比較困難
除此之外,我們?cè)谄渌胤揭话氵€是會(huì)選擇風(fēng)格三,因?yàn)榻Y(jié)構(gòu)體名不導(dǎo)出,外部其實(shí)沒有比較好的辦法進(jìn)行初始化,例如想要 var r Repository ,至于前面提到的直接字面量初始化的問題,我們可以通過統(tǒng)一代碼風(fēng)格解決。
在 外部包 中除了用于參數(shù)傳遞的 Option 結(jié)構(gòu)之外,其余的不允許直接通過 &XXX{} 的方式進(jìn)行初始化
到此,相信大家對(duì)“Go Struct初始化風(fēng)格的抉擇方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)頁名稱:GoStruct初始化風(fēng)格的抉擇方法是什么
分享鏈接:http://aaarwkj.com/article24/peecje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、動(dòng)態(tài)網(wǎng)站、ChatGPT、網(wǎng)站建設(shè)、建站公司、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)