Alpine環(huán)境Go使用Protobuf

<h1>一、安裝protoc</h1><h1>1、什么是protobuf</h1><p>protobuf也叫protocol buffer是google 的一種數(shù)據(jù)交換的格式,它獨(dú)立于語(yǔ)言,獨(dú)立于平臺(tái)。google 提供了多種語(yǔ)言的實(shí)現(xiàn):java、c#、c++、go 和 python,每一種實(shí)現(xiàn)都包含了相應(yīng)語(yǔ)言的編譯器以及庫(kù)文件。</p><p>由于它是一種二進(jìn)制的格式,無(wú)法使用 xml 、json進(jìn)行數(shù)據(jù)交換快許多??梢园阉糜诜植际綉?yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進(jìn)制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲(chǔ)等諸多領(lǐng)域。</p><h1>2、安裝protoc</h1><pre>apk?add?proto</pre><p>驗(yàn)證一下,輸入</p><pre>protoc?--version</pre><p>
</p><h1>二、編譯器調(diào)用</h1><p>Protobuf核心的工具集是C++語(yǔ)言開(kāi)發(fā)的,官方的protoc編譯器中并不支持Go語(yǔ)言,需要安裝一個(gè)插件才能生成Go代碼。用如下命令安裝:</p><p>這個(gè)是舊的命令行</p><pre>go?get?github.com/golang/protobuf/protoc-gen-go</pre><p>新的命令行</p><pre>go?install?google.golang.org/protobuf/cmd/protoc-gen-go@latest</pre><p> 這將在GOBIN中安裝一個(gè)protoc-gen-go二進(jìn)制文件。設(shè)置GOBIN環(huán)境變量以更改安裝位置。它必須在您的$PATH中,協(xié)議緩沖區(qū)編譯器才能找到它。</p><p> 當(dāng)使用go_out標(biāo)志調(diào)用協(xié)議緩沖區(qū)編譯器時(shí),它會(huì)生成Go輸出。go_out標(biāo)志的參數(shù)是您希望編譯器在其中編寫Go輸出的目錄。編譯器為每個(gè).proto文件輸入創(chuàng)建一個(gè)源文件。輸出文件的名稱是通過(guò)將.proto擴(kuò)展名替換為.pb.go創(chuàng)建的。</p><p>
</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27857874-42d06832f816e928.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>
</p><p>
</p><p>相關(guān)官網(wǎng)資:</p><p>https://pkg.go.dev/google.golang.org/protobuf@v1.28.0#section-readme</p><p>https://developers.google.com/protocol-buffers/docs/reference/go-generated</p><p>
</p><h1>三、編寫demo</h1><p>源碼</p><pre>syntax?=?"proto3";
package?tutorial;
option?go_package?=?"./test;tutorial";
message?Person?{
??string?name?=?1;
??int32?id?=?2;??//?Unique?ID?number?for?this?person.
??string?email?=?3;

??enum?PhoneType?{
????MOBILE?=?0;
????HOME?=?1;
????WORK?=?2;
??}

??message?PhoneNumber?{
????string?number?=?1;
????PhoneType?type?=?2;
??}

??repeated?PhoneNumber?phones?=?4;

}

//?Our?address?book?file?is?just?one?of?these.
message?AddressBook?{
??repeated?Person?people?=?1;
}</pre><p>轉(zhuǎn)換命令</p><pre>protoc??--go_out=./?./tutorial.proto</pre><p>
</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27857874-676194e2657b0360.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>
</p><p>轉(zhuǎn)換后部分代碼截圖</p><p>
</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27857874-b6ad61010df9e8fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>
</p><p>生成了后綴是bp.go</p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容