第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Go 中空接口的最佳實(shí)踐?

Go 中空接口的最佳實(shí)踐?

Go
繁星點(diǎn)點(diǎn)滴滴 2022-08-01 16:48:47
我正在學(xué)習(xí)空接口。我發(fā)現(xiàn),雖然有很多解釋 - 也關(guān)于Stackoverflow - 關(guān)于空接口的含義以及它們?nèi)绾喂ぷ鳎P(guān)于何時(shí)/為什么使用它們,何時(shí)避免,注意事項(xiàng)是什么以及選擇使用它們的利弊的最佳實(shí)踐信息很少。在Go聊天室中,我讀到了一些關(guān)于最好避免盡可能避免使用空界面的討論,但沒有適當(dāng)?shù)膮?shù)。其他人自豪地回應(yīng)說,他們的代碼設(shè)計(jì)中沒有空接口。我最感興趣的是使用庫和框架(旨在被其他人重用/擴(kuò)展)。現(xiàn)在我正在閱讀一個(gè)包含相關(guān)庫的框架代碼庫,該代碼庫在許多地方都充滿了emtpy接口。其中一些讓我感到困惑,我想知道是否所有用法都是有道理的。就像框架提供“用戶管理”之類的東西一樣,都是空的界面。在代碼中(在數(shù)據(jù)庫層附近)中,用戶的電子郵件在技術(shù)上被視為用戶首選項(xiàng)。在接口定義中更具體不是更好嗎?AppConfigurationUserPreferences
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

在Go聊天室中,我讀到了一些關(guān)于最好避免盡可能避免使用空界面的討論,但沒有適當(dāng)?shù)膮?shù)。其他人自豪地回應(yīng)說,他們的代碼設(shè)計(jì)中沒有空接口。


最大的問題是你失去了所有的打字;例如,假設(shè)我有一個(gè)函數(shù),我想對(duì)各種類型的數(shù)字進(jìn)行操作,所以我寫:


func AddOne(n interface{}) int64 {

    switch nn := n.(type) {

        case int:

            return nn + 1

        case int8:

            return nn + 1

        // ... etc...

    }

}

但是,如果我將0.42(float64)傳遞給此函數(shù)或字符串怎么辦?如果函數(shù)接受int64(),那么我們將在編譯時(shí)收到有關(guān)此的警告,但是由于一切都是有效的,因此您不會(huì)得到任何東西。"asd"func AddOne(n int64) int64interface{}


你能做的最好的事情就是在運(yùn)行時(shí)處理這個(gè)問題,或者panic()或返回一個(gè)錯(cuò)誤;這顯然比編譯時(shí)錯(cuò)誤要清晰得多。


這是迄今為止最大的缺點(diǎn)。


我必須特別看到這些和函數(shù)的細(xì)節(jié),但是使用空接口有一些很好的理由;例如,當(dāng)您想要接受某些自定義結(jié)構(gòu),然后使用反射根據(jù)某些外部數(shù)據(jù)在結(jié)構(gòu)上設(shè)置值時(shí)。這本質(zhì)上是諸如此類的軟件包所做的,但它也通常用于解析某些配置文件等。AppConfigurationUserPreferencesencoding/json


這聽起來像并且可能適合這一點(diǎn),因?yàn)閹?框架不知道你的應(yīng)用程序配置需要什么設(shè)置,或者有什么用戶首選項(xiàng)。但就像我說的,如果沒有細(xì)節(jié),很難確定。AppConfigurationUserPreferences


另一個(gè)用例是當(dāng)你真的想接受各種各樣的類型時(shí);將參數(shù)傳遞給 SQL 查詢是一個(gè)常見示例,或者 .fmt.Printf()


一般來說,避免可能是最好的,但如果你發(fā)現(xiàn)自己這樣做而彎腰,那么最好只是使用并忍受缺乏打字。interface{}interface{}



查看完整回答
反對(duì) 回復(fù) 2022-08-01
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

空命名接口在 Go 中沒有意義,因?yàn)榕c C# 等其他語言不同,例如,如果任何類型(C# 中的類)與接口簽名匹配,則可以將其強(qiáng)制轉(zhuǎn)換為特定接口。因此,在Go中,“類”(結(jié)構(gòu)類型)不需要從接口繼承(例如,在類型定義時(shí)聲明接口)。

所以你的問題的答案:

Go 中空接口的最佳做法是不在 Go 中定義命名的空接口。

更新:感謝下面的評(píng)論,我已經(jīng)改變了主意,我同意使用空命名接口的用例有限,以便文檔和在IDE中更快地導(dǎo)航。


查看完整回答
反對(duì) 回復(fù) 2022-08-01
  • 2 回答
  • 0 關(guān)注
  • 125 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)