日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

protobuf与protoc-gen-go

發(fā)布時間:2025/7/25 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 protobuf与protoc-gen-go 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

from: https://studygolang.com/articles/12673?fr=sidebar

什么是protobuf

Protobuf(Protocol Buffer)是google 的一種數(shù)據(jù)交換的格式,它獨立于語言,獨立于平臺。google 提供了多種語言的實現(xiàn):java、c#、c++、go 和 python,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進制的格式,比使用 xml 進行數(shù)據(jù)交換快許多。可以把它用于分布式應(yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等諸多領(lǐng)域。(參考鏈接)

什么是protoc

protoc是protobuf文件(.proto)的編譯器(參考鏈接),可以借助這個工具把 .proto 文件轉(zhuǎn)譯成各種編程語言對應(yīng)的源碼,包含數(shù)據(jù)類型定義、調(diào)用接口等。

通過查看protoc的源碼(參見github庫)可以知道,protoc在設(shè)計上把protobuf和不同的語言解耦了,底層用c++來實現(xiàn)protobuf結(jié)構(gòu)的存儲,然后通過插件的形式來生成不同語言的源碼。可以把protoc的編譯過程分成簡單的兩個步驟(如上圖所示):1)解析.proto文件,轉(zhuǎn)譯成protobuf的原生數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中保存;2)把protobuf相關(guān)的數(shù)據(jù)結(jié)構(gòu)傳遞給相應(yīng)語言的編譯插件,由插件負(fù)責(zé)根據(jù)接收到的protobuf原生結(jié)構(gòu)渲染輸出特定語言的模板。

源碼中(參見github庫)包含的插件有 csharp、java、js、objectivec、php、python、ruby等多種。

什么是protoc-gen-go

protoc-gen-go是protobuf編譯插件系列中的Go版本。從上一小節(jié)知道原生的protoc并不包含Go版本的插件,不過可以在github上發(fā)現(xiàn)專門的代碼庫(參見github庫)。

由于protoc-gen-go是Go寫的,所以安裝它變得很簡單,只需要運行 go get -u github.com/golang/protobuf/protoc-gen-go,便可以在$GOPATH/bin目錄下發(fā)現(xiàn)這個工具。至此,就可以通過下面的命令來使用protoc-gen-go了。

protoc --go_out=output_directory input_directory/file.proto

其中"--go_out="表示生成Go文件,protoc會自動尋找PATH(系統(tǒng)執(zhí)行路徑)中的protoc-gen-go執(zhí)行文件。

protoc-gen-go的源碼

按照Go的代碼風(fēng)格,protoc-gen-go源碼主要包含六個包(package):

  • main包

    • doc.go 主要是說明。
    • link_grpc.go 顯式引用protoc-gen-go/grpc包,觸發(fā)grpc的init函數(shù)。
    • main.go 代碼不到50行,初始化generator,并調(diào)用generator相應(yīng)的方法輸出protobuf的Go語言文件。
  • generator包

    • generator.go 包含了大部分由protobuf原生結(jié)構(gòu)到Go語言文件的渲染方法,其中 func (g *Generator) P(str ...interface{}) 這個方法會把渲染輸出到generator的output(generator匿名嵌套了bytes.Buffer,因此有Buffer的方法)。
    • name_test.go 測試,主要包含generator中名稱相關(guān)方法的測試。
  • grpc包

    • grpc.go 與generator相似,但是包含了很多生成grpc相關(guān)方法的方法,比如渲染轉(zhuǎn)譯protobuf中定義的rpc方法(在generator中不包含,其默認(rèn)不轉(zhuǎn)譯service的定義)
  • descriptor 包含protobuf的描述文件(.proto文件及其對應(yīng)的Go編譯文件),其中proto文件來自于proto庫(參見這里)

  • plugin 包含plugin的描述文件(.proto文件及其對應(yīng)的Go編譯文件),其中proto文件來自于proto庫,參見這里

結(jié)語

從巴別塔的傳說(參見這里)可以知道,欲要構(gòu)建大系統(tǒng),個體之間的溝通規(guī)范很重要。protobuf的出現(xiàn),為不同系統(tǒng)之間的連接提供了一種語言規(guī)范,只要遵循了這個規(guī)范,各個系統(tǒng)之間就是解耦的,非常適合近年來流行的微服務(wù)架構(gòu)。

如果吧protoc和protoc-gen-go看成兩個微服務(wù),可以發(fā)現(xiàn)這兩個服務(wù)就是完全解耦的;兩者完全負(fù)責(zé)不同的功能,可以分別編碼、升級,串接這兩個服務(wù)的就是proto規(guī)范。

總結(jié)

以上是生活随笔為你收集整理的protobuf与protoc-gen-go的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级绝黄 | 久久草视频| 色人综合 | 天天操天天操天天操天天操 | 爆乳熟妇一区二区三区霸乳 | 青草草在线 | 91免费 看片 | av合集| 日本aaa视频 | 色啦啦视频| 在线激情| 99re国产精品 | 武林美妇肉伦娇喘呻吟 | 偷偷在线观看免费高清av | 国产良妇出轨视频在线观看 | 日韩免费观看一区二区 | 91av免费| 中文字幕乱码人妻无码久久 | 女人脱下裤子让男人桶 | 日韩免费一级片 | 欧美一区二区视频在线观看 | 五月婷婷视频在线 | 久久久久久久亚洲精品 | www.国产黄色| 久久综合成人网 | 天天摸天天干天天操 | 亚洲电影中文字幕 | 日日撸视频 | 动漫美女放屁 | 美国成人免费视频 | 爱情岛论坛永久入址测速 | 亚洲精品自拍视频 | 不卡的免费av | 欧美 日韩 国产 在线观看 | 精品人妻无码一区二区 | 亚洲视频欧美 | 97视频久久久 | 日韩有码第一页 | 亚洲精品第三页 | 久久精品日韩无码 | 日本久久爱 | 亚洲综合免费观看高清完整版 | 精品乱码一区二区三四区视频 | 深夜福利网站 | 欧美18—19性高清hd4k | 99热这里只有精品8 国产一卡二 | 一区二区免费视频 | 欧美日本亚洲 | 亚洲综合a| 亚洲国产一区二区在线 | 青娱乐最新视频 | 午夜一区二区三区免费 | 少妇饥渴难耐 | 国产鲁鲁视频在线观看免费 | 一区二区精品在线 | 精品人妻av一区二区三区 | 久久婷婷色综合 | 成人国产精品免费观看视频 | free性欧美hd另类 | 亚洲黄色在线 | 热久久最新网址 | 毛片小视频 | 少妇按摩一区二区三区 | 伊人久久成人 | 国产精品视频一二三 | 亚洲人妻一区二区三区 | 欧美亚洲国产一区二区三区 | 少妇aa| 日本午夜精华 | 捆绑凌虐一区二区三区 | 91尤物在线| 亚洲精品乱码久久久久久蜜桃欧美 | 有声小说 成人专区 | 美腿丝袜亚洲色图 | xxx一区二区 | 中文字幕精品一区二区精品 | 欧美性猛交xxxx乱大交3 | jizz日本少妇| 特黄aaaaaaa片免费视频 | 寂寞人妻瑜伽被教练日 | 干爹你真棒插曲免费 | 国产精品欧美激情 | 草久影院| 西西人体做爰大胆gogo | 日韩精品人妻无码一本 | 午夜爱爱网站 | 1级黄色大片| 亚洲精品色 | 欧美日韩三| 欧美精品性视频 | 国产人久久人人人人爽 | 免费三级网站 | 日韩激情四射 | 四虎影视最新网址 | 久久国产一区 | 天天干天天操天天干 | 国产精品久久久久久久免费观看 | 亚洲伦理网站 | 亚洲瘦老头同性xxxxx |