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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go语音protobuf_golang 使用 protobuf 的教程

發布時間:2023/12/2 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语音protobuf_golang 使用 protobuf 的教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、下載protobuf的編譯器protoc

地址:

window:

下載: protoc-3.3.0-win32.zip

解壓,把bin目錄下的protoc.exe復制到GOPATH/bin下,GOPATH/bin加入環境變量。

當然也可放在其他目錄,需加入環境變量,能讓系統找到protoc.exe

linux:

下載:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip

解壓,把bin目錄下的protoc復制到GOPATH/bin下,GOPATH/bin加入環境變量。

如果喜歡編譯安裝的,也可下載源碼自行安裝,最后將可執行文件加入環境變量。

2、獲取protobuf的編譯器插件protoc-gen-go

進入GOPATH目錄

運行

go get -u github.com/golang/protobuf/protoc-gen-go

如果成功,會在GOPATH/bin下生成protoc-gen-go.exe文件

3、創建一個test.proto文件

//指定版本//注意proto3與proto2的寫法有些不同

syntax = "proto3";//包名,通過protoc生成時go文件時

package test;//手機類型//枚舉類型第一個字段必須為0

enumPhoneType {

HOME= 0;

WORK= 1;

}//手機

message Phone {

PhoneType type= 1;string number = 2;

}//人

message Person {//后面的數字表示標識號

int32 id = 1;string name = 2;//repeated表示可重復//可以有多個手機

repeated Phone phones = 3;

}//聯系簿

message ContactBook {

repeated Person persons= 1;

}

4、運行如下命令

> protoc --go_out=. *.proto

會生成一個test.pb.go的文件,具體的文件內容我就不截圖了。

5、在go語言中使用protobuf

package main;

import ("github.com/golang/protobuf/proto"

"protobuf/test"

"io/ioutil"

"os"

"fmt")

func write() {

p1 := &test.Person{

Id:1,

Name:"小張",

Phones: []*test.Phone{

{test.PhoneType_HOME,"111111111"},

{test.PhoneType_WORK,"222222222"},

},

};

p2 := &test.Person{

Id:2,

Name:"小王",

Phones: []*test.Phone{

{test.PhoneType_HOME,"333333333"},

{test.PhoneType_WORK,"444444444"},

},

};//創建地址簿

book := &test.ContactBook{};

book.Persons=append(book.Persons, p1);

book.Persons=append(book.Persons, p2);//編碼數據

data, _ :=proto.Marshal(book);//把數據寫入文件

ioutil.WriteFile("./test.txt", data, os.ModePerm);

}

func read() {//讀取文件數據

data, _ := ioutil.ReadFile("./test.txt");

book := &test.ContactBook{};//解碼數據

proto.Unmarshal(data, book);for _, v :=range book.Persons {

fmt.Println(v.Id, v.Name);for _, vv :=range v.Phones {

fmt.Println(vv.Type, vv.Number);

}

}

}

func main() {

write();

read();

}

總結

以上是生活随笔為你收集整理的go语音protobuf_golang 使用 protobuf 的教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。