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

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

為什么結構體可以作為接口傳遞給函數?

為什么結構體可以作為接口傳遞給函數?

Go
守候你守候我 2023-07-17 15:01:45
我有一些示例代碼,將接口作為輸入,如下所示。type RouteGuideServer interface {? ? ? ? ...}func RegisterRouteGuideServer(s *grpc.Server, srv RouteGuideServer) {? ? s.RegisterService(&_RouteGuide_serviceDesc, srv)}這一切都很好,但是當實現這個服務器時,我們有以下代碼,它為函數提供了一個結構(實現接口),如下所示。type routeGuideServer struct {? ? ? ? ...}...pb.RegisterRouteGuideServer(grpcServer, &routeGuideServer{})我希望當給出錯誤的類型時會拋出錯誤。為什么這有效?我感覺這個應該不行吧?我會感謝任何反饋,謝謝!
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

Aninterface定義了一組方法。任何具有這些方法的類型都會“實現”該接口。


在您的例子中,您有一個實現接口的所有方法的結構類型。這意味著該結構類型的值可以在需要此類接口的任何地方使用。當您像以前一樣將結構體值傳遞給函數時,編譯器將檢查該值是否實現了該接口的所有函數,如果實現了,則將該值作為接口發送給該函數。在函數外部,您擁有結構體值,但在函數內部,您只能看到該接口的函數。但是,您可以進行類型斷言并恢復該接口的值:


func (f interfaceType) {

   if k, ok := f.(myType); ok {

      // Here, k is the value of the interface, which is of type "myType"

   }


查看完整回答
反對 回復 2023-07-17
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

這是有效的,因為*routeGuideServer實現了RouteGuideServer.?如果錯誤類型沒有實現RouteGuideServer,你會得到一個錯誤:

錯誤類型未實現RouteGuideServer(缺少“某些”方法)


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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