golang Grpc 中出現(xiàn) it has a non-exported method and is defined in a different package

首先說一下版本

文檔日期:20201021

grpc:v1.32.0

protoc:?libprotoc 3.9.0

protoc-gen-go: v1.25.0

protoc-gen-go-grpc:v1.0

ps:查看protoc系列的版本命令終端執(zhí)行 protoc --version

起因

版本更新,正好閑著沒事簡單復(fù)習(xí)一下,意外出現(xiàn)了以下錯誤

it has a non-exported method and is defined in a different package

正文

先看下定義的proto,紅色部分是編譯器沒有找到proto文件,這并不影響我們本文的問題。


proto文件

通過命令生成文件大概命令如下(如何生成自行百度,不是本文的重點):

protoc -I $gopath/include/googleapis -I . --go_out=. --go-grpc_out=. ./api/login/login.proto

新版生成命令和舊版不一樣了,舊命令如下:

protoc -I $gopath/include/googleapis -I . --go_out=plugins=grpc:. ./api/login/login.proto

另外還有一點pb描述和rpc方法代碼之前舊版生成是在一個文件中,目前新版本pb和rpc代碼方法已經(jīng)分離,生成的文件格式特征如下:

紅色的文件是通過命令生成的

然后我們看下剛剛生成的login_grpc.pb.go文件,其中一部分代碼片段:

OK到這準(zhǔn)備工作基本完畢,下面編寫代碼,實現(xiàn)LoginServer接口如下代碼

var _login.LoginServer = &server{} 這句就是判斷我們聲明server這個結(jié)構(gòu)體是否實現(xiàn)了login.LoginServer接口,很顯然它沒實現(xiàn),兜兜轉(zhuǎn)轉(zhuǎn)之后解決方法如下

需要把login.UnimplementedLoginServer?結(jié)構(gòu)體組合(繼承)到自己定義的結(jié)構(gòu)體中,ok編譯器也沒有提示報錯。

總結(jié)

目前grpc還是在頻繁變動更新需要隨時留意關(guān)注更新,在瀏覽源代碼的時候我們能看到很多代碼注釋中標(biāo)注Deprecated:xxx 和?This API is EXPERIMENTAL. 關(guān)鍵字。另外之前跟grpc相關(guān)的代碼有些已經(jīng)重命名遷移到新庫中,所以有點坑。。。干開發(fā)學(xué)無止境啊。

一個用golang的牛馬

完~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容