首先說(shuō)一下版本
文檔日期: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
起因
版本更新腋舌,正好閑著沒(méi)事簡(jiǎn)單復(fù)習(xí)一下,意外出現(xiàn)了以下錯(cuò)誤
it has a non-exported method and is defined in a different package
正文
先看下定義的proto,紅色部分是編譯器沒(méi)有找到proto文件,這并不影響我們本文的問(wèn)題。
通過(guò)命令生成文件大概命令如下(如何生成自行百度,不是本文的重點(diǎn)):
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
另外還有一點(diǎn)pb描述和rpc方法代碼之前舊版生成是在一個(gè)文件中,目前新版本pb和rpc代碼方法已經(jīng)分離,生成的文件格式特征如下:
然后我們看下剛剛生成的login_grpc.pb.go文件,其中一部分代碼片段:
OK到這準(zhǔn)備工作基本完畢,下面編寫代碼糊探,實(shí)現(xiàn)LoginServer接口如下代碼
var _login.LoginServer = &server{} 這句就是判斷我們聲明server這個(gè)結(jié)構(gòu)體是否實(shí)現(xiàn)了login.LoginServer接口钾埂,很顯然它沒(méi)實(shí)現(xiàn)河闰,兜兜轉(zhuǎn)轉(zhuǎn)之后解決方法如下
需要把login.UnimplementedLoginServer?結(jié)構(gòu)體組合(繼承)到自己定義的結(jié)構(gòu)體中,ok編譯器也沒(méi)有提示報(bào)錯(cuò)褥紫。
總結(jié)
目前grpc還是在頻繁變動(dòng)更新需要隨時(shí)留意關(guān)注更新姜性,在瀏覽源代碼的時(shí)候我們能看到很多代碼注釋中標(biāo)注Deprecated:xxx 和?This API is EXPERIMENTAL. 關(guān)鍵字。另外之前跟grpc相關(guān)的代碼有些已經(jīng)重命名遷移到新庫(kù)中髓考,所以有點(diǎn)坑部念。。氨菇。干開(kāi)發(fā)學(xué)無(wú)止境啊儡炼。
一個(gè)用golang的專科生
完~