gogoprotobuf在windows上遇見的坑

2021-10-07 02:44:34 字數 2800 閱讀 7957

接下來你要編譯gogo的protoc-gen-go檔案,進入github.com\gogo\protobuf\protoc-gen-gogofast和github.com\gogo\protobuf\protoc-gen-gogo(這裡我就選用了這2個),使用go

build命令生成可執行檔案。並將生成的檔案和protoc.exe一起放入bin目錄下。

接下來在我們的test資料夾裡建立乙個proto檔案,並附上內容

//協議頭

message pbtest

如果你對生成的go的格式沒有什麼要求,把上面的引用gogo.proto注釋掉,執行下面的命令就應該行了。而作為有強迫症的我,就只有默默的踩坑。

%gopath%\bin\protoc.exe --plugin=protoc-gen-go=%gopath%\bin\protoc-gen-gogo.exe  --go_out=. base.proto(%gopath%你們這個需要自己在環境變數裡面改,我這裡的是e\gotest,protoc-gen-gogo.exe就是剛才我們生成的檔案)
然後報錯,具體就是說缺少google/protobuf/descriptor.proto檔案,我在目錄下一看,確實沒這個包,咋辦呢?我突然想到了之前gogoproto介紹說相容了google的proto,那麼肯定本地應該有這個檔案的,果然不出我的猜想,在github.com\gogo\protobuf\protobuf目錄下發現了google資料夾,然後順騰摸瓜就找到了descriptor.proto檔案。

於是我們就改下這個gogo.proto中descriptor.proto的位址吧,在改之前最好拷貝乙份,做個備份,萬一你的git回滾不了呢

這次我們再試一試,生成go檔案成功,這下我們就可以使用這個gamemsg了

上面的**被我標註紅色的可以看出,這些東西看著是不是很彆扭,因為對我而言,我根本用不著這些,我解析都有自己的一套規則,還有加密演算法在裡面,所以我只需要生成這個結構體部分就行了,多餘的部分那就想辦法乾掉它。

然後我們看到的效果是果然***的字段沒有了,但是下面的函式帶***的還有。

我有時候都懷疑我是金牛座的——犟,查了大量網上資料無果後,咋辦?看原始碼吧,找到它,接近它,乾掉它(就是這麼暴力)。

最後在github.com/gogo/protobuf/protoc-gen-gogo/generator裡找到了***_unmarshal,它是在generatecommonmethods函式裡,大致看了一下,這裡就是它自動給你生成函式的地方,檢視呼叫的地方,注釋了沒啥影響,注釋掉。

然後重新編譯下protoc-gen-gogo.exe吧,編譯好了記得替換掉bin目錄下的protoc-gen-gogo.exe

然後執行,看看結果,果然不見了,現在是不是看著清爽多了,當然你如果還是想用工具裡自帶的序列化和反序列化,那你還是保留吧。

工具這東西就是為了讓我們使用方便的東西,如果當使用費勁的時候,我們就應該想如何去解決問題,把複雜的東西簡單化,提高效率才是我們所不斷追求的目標。希望這篇文章能帶給那些需要人一些幫助。

在wince程式中呼叫DOS命令重啟wince

在家遠端工作時,除錯的裝置不在旁邊,正好vnc又不好用了,於是想到寫個程式重啟下裝置。以下是我用vs2005編譯的程式 include stdafx.h include int tmain int argc,tchar ar 說明 cmd.exe是wince上的命令列程式,這個使用createpro...

centos minimal 命令列連線wifi

markdown 首行縮排 輸入法 全形兩個空格 即可 一般情況下快捷鍵shift space 切換半形與全形 ifconfig eth0 up然後再用ifconfig檢視,就能看到eth0 已經鏈結到網上了.為了能夠在電腦重啟後能自動開啟eth0 需要修改 etc sysconfig networ...

微軟宣布開源WPF WinForms和WinUI

在微軟connect 2018大會上,微軟發布了.net core 3.0的第乙個預覽版。同時,微軟還宣布,他們將wpf windows forms winforms 和winui作為開源專案託管在github上。它們都是基於mit許可發行,開發人員可以在自己的應用程式中使用它們。這意味著.net ...