我有一些示例代碼,將接口作為輸入,如下所示。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"
}

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
這是有效的,因為*routeGuideServer
實現了RouteGuideServer
.?如果錯誤類型沒有實現RouteGuideServer
,你會得到一個錯誤:
錯誤類型未實現RouteGuideServer(缺少“某些”方法)
- 2 回答
- 0 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消