亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將接口的定義與其實現分離

將接口的定義與其實現分離

Go
一只名叫tom的貓 2022-05-23 16:18:05
在 Tour of Go 的過程中,出現了以下摘錄,但我無法理解它(我猜我缺乏 OOP 知識)。Go 中的接口被定義為一組方法簽名。在 Go 中,接口是隱式的。因此,無需在給定類型上定義它實現某個接口。這樣做的好處是接口的定義與其實現分離,然后可以在沒有預先安排的情況下出現在任何包中。優勢如何decoupling a definition of an interface from its implementation?我最初的想法是,這種方法大大降低了接口的“剛性”(也就是重要性)。它只是語法糖,事情實際上在引擎蓋下“正常工作”嗎?感謝您的時間。
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

這稱為“鴨子類型”,它允許在需要的地方定義接口,而不是作為數據類型本身的一部分??紤]以下類型:


type X struct {...}


func (X) f()

func (X) g()

func (X) h()

該類型X具有三種方法,f(), g(), h()。如果你有一個數據結構或函數需要調用一個f()方法,你可以定義一個接口:


type FIntf interface {

   f()

}

現在X實現該接口。X您可以傳遞需要的任何地方的實例FIntf。


如果在另一個模塊中你需要g()and h(),你可以在那里定義一個接口:


type GIntf interface {

  g()

  h()

現在X實現GIntf.


如果您有一個沒有實現您需要的接口的第三方庫,這將特別有用。您可以在使用它的地方簡單地定義一個接口,并使用具有正確方法集的第三方類型來實現您的接口。


這種方法的主要優點是您仍然可以模擬傳統的接口概念,您可以在其中定義接口及其具體實現。最重要的是,您可以根據需要靈活地定義不同的接口,而無需修改實現。在像 Java 這樣的語言中,如果您有一個獲得特定接口的函數,而您的對象沒有,那么即使方法集存在于原始類型上,您也必須編寫一個適配器。在 Go 中,您不需要這樣做。


在調用方法時,鴨子類型也允許類型安全。例如,如果您有一個必須調用方法x()及其y()參數之一的函數,請定義一個包含x()and的接口y(),并使用類型斷言來驗證參數是否實現了這兩個方法。


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號