mac golang grpc proto pb文件生成go文件.md
文章目錄
- 1.簡介
- 2.操作步驟
- 1. 安裝基礎(chǔ)的protoc工具
- 1. 下載
- 2. 添加protoc到PATH
- 3. 安裝golang的支持
- 4. 使用
- 1. 普通編譯
- 2. import的路徑
- 參考
1.簡介
??protobuf是google的一個數(shù)據(jù)編碼格式,類似json一樣,但是壓縮率更好,表達的類型也更多,在rpc服務(wù)中使用的比較多。golang的grpc也是挺好玩的,基于http的rpc服務(wù),可能還是為了更好的數(shù)據(jù)壓縮?還是因為沒有spring cloud這樣強大的對http的封裝?說到這里可以吐槽一下,這一份工作中開始用到了號稱世界上最好的語言golang,老實說,能夠吊打python, 但是和我最愛的java相比還是有很大的差距的,我要偷偷的喊一句java 是最好的編程語言了。
??golang基本上可以認為是偏向函數(shù)式編程的語言,語言的簡潔性相對來說比java更簡潔(簡潔一般情況下也意味著信息的丟失,所以golang代碼的可讀性我覺得比java還是差一丟丟),這不是最重要的,只要不是python那種看代碼全靠print的都還好。golang的最大的缺陷我認為在于沒有對繼承進行支撐,golang的設(shè)計理念應(yīng)該是摒棄了繼承,所有的都用組合來實現(xiàn),在面向?qū)ο蟮木幊讨芯蜁茈y受,對象初始化的時候就需要手動初始化父類,如果是多重繼承,真會讓人哭的。還有就是沒有切面支持,也沒有注解支持,這兩個特性在java程序中真的是非常優(yōu)秀的特性,在座復(fù)雜的系統(tǒng)設(shè)計的時候想要做到靈活這兩個特性非常好用,動態(tài)獲取一些信息,而對于golang來說則只能采用硬編碼了,做復(fù)雜系統(tǒng)設(shè)計的時候會很痛苦,只能使用策略模式手動維護了,很多時候能夠應(yīng)付的場景也很有限??纯磄olang的后期發(fā)展吧,目前只能說做做業(yè)務(wù)還是可以的。
??跑偏了,再來說說mac下如何使用protoc工具生成go文件吧。
2.操作步驟
1. 安裝基礎(chǔ)的protoc工具
1. 下載
cd ~/software/protobuf wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.0/protoc-3.12.0-osx-x86_64.zip unzip -xzf protoc-3.12.0-osx-x86_64.zip2. 添加protoc到PATH
對應(yīng)的readme文件中這樣說
This package contains a precompiled binary version of the protocol buffer compiler (protoc). This binary is intended for users who want to use Protocol Buffers in languages other than C++ but do not want to compile protoc themselves. To install, simply place this binary somewhere in your PATH.If you intend to use the included well known types then don't forget to copy the contents of the 'include' directory somewhere as well, for example into '/usr/local/include/'.也就是只要把bin/protoc這個二進制文件移動到path下面即可。
mv bin/protoc /usr/local/protoc # 這一步有多重操作方式,比如把路徑加到PATH下面 #查看 protoc protoc --version3. 安裝golang的支持
這個是google的支持,這個貌似是最快的,支持的也很好
go get github.com/gogo/protobuf/protoc-gen-gofast也可以安裝這個google的,但是后面的使用命令就不一樣了
go install google.golang.org/protobuf/cmd/protoc-gen-go4. 使用
1. 普通編譯
protoc --gofast_out=plugins=grpc:./mygo mygo/service/ago/service/service.protoprotoc --gofast_out=plugins=grpc:./ service.proto這里的grpc:./mygo使用的是相對路徑,默認后面pb的路徑使用的也是相對路徑,會在./mygo生成pb文件中指定的go_package目錄,然后生成對應(yīng)的go文件。
2. import的路徑
如果有import,則是使用執(zhí)行protoc 命令所在的路徑作為import相對路徑的起始位置
比如pb文件是這樣
$pwd /Users/chencc/work/git/mygo/service/call/talent$cat talent.proto import "call/base.proto"; 這個import的文件的查找就是按照執(zhí)行proto命令的位置進行查找 option go_package = "mygo/service/call/talent"; // 這個package會按照 gofast_out 參數(shù)的路徑生成子目錄兩個文件的路徑分別是
/Users/chencc/work/git/mygo/service/call/talent/talent.proto /Users/chencc/work/git/mygo/service/call/base.proto其中talent.proto import 了base.proto則執(zhí)行proto命令的位置必須是/Users/chencc/work/git/mygo/service
執(zhí)行的命令是
cd /Users/chencc/work/git/mygo/service/protoc --gofast_out=plugins=grpc:/Users/chencc/work/git/ call/talent/talent.proto/Users/chencc/work/git/ 這個目錄是 mygo項目的父級目錄參考
這個介紹的更好,可以參考這篇文章進行更加深入的學習
https://www.cnblogs.com/bergus/articles/protoc-gong-ju-cha-jian-he-sheng-tai.html
總結(jié)
以上是生活随笔為你收集整理的mac golang grpc proto pb文件生成go文件.md的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: logstash使用中遇到的问题
- 下一篇: spark submit 运行的时候增加