首頁 >後端開發 >Golang >gRPC 的「mustEmbedUnimplemented*」如何增強前向相容性和執行階段錯誤處理?

gRPC 的「mustEmbedUnimplemented*」如何增強前向相容性和執行階段錯誤處理?

Patricia Arquette
Patricia Arquette原創
2024-12-05 14:56:11903瀏覽

How Does gRPC's

了解gRPC 中的「mustEmbedUnimplemented*

最近引入了mplemustEmbed mplemust. ” gRPC-go中的方法,向前兼容性增強意義。此變更提出了一個問題:此功能如何增強功能並解決先前遇到的挑戰?

前向相容性

在早期版本中,缺少方法實作的 gRPC 伺服器會觸發編譯時錯誤。這個錯誤起到了故障保護的作用,防止了不完整的實作。然而,較新版本的 protoc-gen-grpc-go 編譯器現在要求伺服器透過實現「未實現的

*

」介面來實現前向相容。

前向相容性的好處

向前相容性提供了多種優點:

    運行時錯誤處理:
  1. 不完整的實作現在將在呼叫時導致運行時錯誤,而不是停止編譯。這可確保方法在呼叫之前已實現,從而防止潛在的崩潰。
  2. 分階段實作:
  3. 前向相容性允許逐步實作新方法。尚未準備就緒的實作可以在不觸發錯誤的情況下嵌入,從而允許開發人員優先考慮最關鍵的實作。
嵌入「未實現

*要嵌入「未實現

*

」接口,只需新增一個nil實作到您的伺服器結構,如下所示:

這不會導致編譯器錯誤,但任何未實作的方法都會導致執行時間「codes.Unimplemented」錯誤。
type server struct {
    pdfpb.UnimplementedGreetServiceServer
}

選擇退出前向相容性

如果需要,您可以透過以下方式選擇退出前向相容性而是嵌入「不安全」介面。這些介麵包括「mustEmbedUnimplemented

*

」方法,而不需要實際的方法實作。

type FooBarService struct {
    grpc.UnsafeFooBarServiceServer
    // other fields
}
產生沒有前向相容性的程式碼

您也可以透過將「require_unimplemented_servers = false」選項傳遞給protoc-gen-grpc-go 插件:

以上是gRPC 的「mustEmbedUnimplemented*」如何增強前向相容性和執行階段錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn