protobuf 基本使用

2021-10-18 15:55:57 字數 2818 閱讀 7565

# linux

apt install -y protobuf-compiler

# mac

brew install protobuf

# 原始碼安裝

wget

unzip protobuf-all-3.5.1.zip

cd protobuf-3.5.1/

./configure

make

make

install

# 檢查是否安裝成功

protoc --version

# 官方

# 更快的

--go_out=設定pb.go**輸出根目錄plugins=grpc生成grpc相關**

pulgins=paths=根路徑下設定構建目錄層級方式

source_relative按照 proto 原始檔的目錄層級在根目錄下建立目錄層級

對repeated欄位使用複數

enum欄位名大寫下劃線

若第乙個字元是_,它將被替換為x

import

編譯器會在通過命令列引數--proto-path中指定的資料夾中搜尋.proto檔案

import中指定的路徑和生成的go檔案引用的路徑無關,後者和option go_package有關

需要將.proto檔案移動到新位置時,可以在舊位置放置乙個虛擬.proto檔案

package

屬於 proto 檔案自身的定義

在go的包名中會將.自動轉換為_

option go_package

向後相容性

message定義可以被定義在其他訊息型別內部message編碼成二進位制訊息體時,字段編號1-15將會占用1個位元組,16-2047將占用兩個位元組

對於刪掉不用的字段,為了防止其他人重用了之前的字段編號,應該使用reserved保留該編號

.proto檔案中的注釋使用/// ... /map型別

列舉型別

訊息中的列舉,型別名字以訊息名開頭;對於包級別的列舉,不會改變名稱

編譯器會生成從整數值到字串名稱的對映以及從名稱到值的對映

.

├── api

│ ├── proto

│ │ ├── demo

│ │ │ └── api1.proto

│ │ ├── upstream1

│ │ │ ├── api1.proto

│ │ │ └── api2.proto

│ │ ├── downstream1

│ │ │ └── api1.proto

│ │ └── third_party

│ │ └── google

│ │ └── protobuf

│ │ └── empty.proto

│ └── thrift

├── go.mod

└── go.sum

syntax = "proto3";

package ;

option go_package="";

import "";

protoc -i=. -i=api/proto/thrid_party --go_out=plugins=grpc,paths=source_relative:. api/proto/demo/*.proto

protoc -i=. -i=api/proto/thrid_party --go_out=plugins=grpc,paths=source_relative:. api/proto/upstream1/*.proto

protoc -i=. -i=api/proto/thrid_party --go_out=plugins=grpc,paths=source_relative:. api/proto/downstream1/*.proto

protobuf基本操作1

最近領導分配了乙個任務,這個工程挺高階的,主要以前從沒有搞過,其中裡面有protobuf,以前從來沒有聽說過這個東西,最近在網上看了一些高人的帖子,才知道protobuf是什麼云云了,我的理解是,例如我們要用c 寫個什麼工程,c 是物件導向的,我們要寫很多類,估計都得寫上上百行,上千行的 但是現在用...

protobuf簡單使用

一 介紹 首先,protobuf是乙個開源專案,而且是後台很硬的開源專案。網上現有的大部分 至少80 開源專案,要麼是某人單幹 要麼是幾個閒雜人等合夥搞。而protobuf則不然,它是 鼎鼎大名的google公司開發出來,並且在google內部久經考驗的乙個東東。由此可見,它的作者絕非一般閒雜人等可...

C 使用protobuf簡述

首先,建立乙個c 4.5以上project,因為最新的protobuf依賴於c 5.0的語言特性。然後,我們通過nuget,為專案新增對protobuf的引用,搜尋protobuf就可以開始安裝了。安裝完成後,可以編譯一次工程,在bin debug目錄下就可以拿到google.protobuf.dl...