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的一個(gè)數(shù)據(jù)編碼格式,類似json一樣,但是壓縮率更好,表達(dá)的類型也更多,在rpc服務(wù)中使用的比較多。golang的grpc也是挺好玩的,基于http的rpc服務(wù),可能還是為了更好的數(shù)據(jù)壓縮?還是因?yàn)闆]有spring cloud這樣強(qiáng)大的對(duì)http的封裝?說到這里可以吐槽一下,這一份工作中開始用到了號(hào)稱世界上最好的語言golang,老實(shí)說,能夠吊打python, 但是和我最愛的java相比還是有很大的差距的,我要偷偷的喊一句java 是最好的編程語言了。
??golang基本上可以認(rèn)為是偏向函數(shù)式編程的語言,語言的簡潔性相對(duì)來說比java更簡潔(簡潔一般情況下也意味著信息的丟失,所以golang代碼的可讀性我覺得比java還是差一丟丟),這不是最重要的,只要不是python那種看代碼全靠print的都還好。golang的最大的缺陷我認(rèn)為在于沒有對(duì)繼承進(jìn)行支撐,golang的設(shè)計(jì)理念應(yīng)該是摒棄了繼承,所有的都用組合來實(shí)現(xiàn),在面向?qū)ο蟮木幊讨芯蜁?huì)很難受,對(duì)象初始化的時(shí)候就需要手動(dòng)初始化父類,如果是多重繼承,真會(huì)讓人哭的。還有就是沒有切面支持,也沒有注解支持,這兩個(gè)特性在java程序中真的是非常優(yōu)秀的特性,在座復(fù)雜的系統(tǒng)設(shè)計(jì)的時(shí)候想要做到靈活這兩個(gè)特性非常好用,動(dòng)態(tài)獲取一些信息,而對(duì)于golang來說則只能采用硬編碼了,做復(fù)雜系統(tǒng)設(shè)計(jì)的時(shí)候會(huì)很痛苦,只能使用策略模式手動(dòng)維護(hù)了,很多時(shí)候能夠應(yīng)付的場景也很有限。看看golang的后期發(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
對(duì)應(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這個(gè)二進(jìn)制文件移動(dòng)到path下面即可。
mv bin/protoc /usr/local/protoc # 這一步有多重操作方式,比如把路徑加到PATH下面 #查看 protoc protoc --version3. 安裝golang的支持
這個(gè)是google的支持,這個(gè)貌似是最快的,支持的也很好
go get github.com/gogo/protobuf/protoc-gen-gofast也可以安裝這個(gè)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使用的是相對(duì)路徑,默認(rèn)后面pb的路徑使用的也是相對(duì)路徑,會(huì)在./mygo生成pb文件中指定的go_package目錄,然后生成對(duì)應(yīng)的go文件。
2. import的路徑
如果有import,則是使用執(zhí)行protoc 命令所在的路徑作為import相對(duì)路徑的起始位置
比如pb文件是這樣
$pwd /Users/chencc/work/git/mygo/service/call/talent$cat talent.proto import "call/base.proto"; 這個(gè)import的文件的查找就是按照?qǐng)?zhí)行proto命令的位置進(jìn)行查找 option go_package = "mygo/service/call/talent"; // 這個(gè)package會(huì)按照 gofast_out 參數(shù)的路徑生成子目錄兩個(gè)文件的路徑分別是
/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/ 這個(gè)目錄是 mygo項(xiàng)目的父級(jí)目錄參考
這個(gè)介紹的更好,可以參考這篇文章進(jìn)行更加深入的學(xué)習(xí)
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 运行的时候增加