1. Téléchargez le protocole du compilateur protobuf
Adresse : https://github.com/google/protobuf/releases
fenêtre :
Télécharger : protoc-3.3.0-win32.zip
Décompressez, copiez protoc.exe dans le répertoire bin dans GOPATH/bin et ajoutez GOPATH/bin à la variable d'environnement.
Bien sûr, il peut également être placé dans d'autres répertoires. Vous devez ajouter des variables d'environnement pour que le système puisse trouver protoc.exe
linux :
Télécharger : protoc. -3.3.0-linux- Décompressez x86_64.zip ou protoc-3.3.0-linux-x86_32.zip
, copiez le protocole dans le répertoire bin dans GOPATH/bin et ajoutez GOPATH/bin à l'environnement variable.
Si vous aimez compiler et installer, vous pouvez également télécharger le code source et l'installer vous-même, et enfin ajouter le fichier exécutable à la variable d'environnement.
2. Obtenez le plug-in du compilateur protobuf protoc-gen-go
Entrez dans le répertoire GOPATH
exécutez
> go get -u github.com/golang/protobuf/protoc-gen-go
En cas de succès, ce sera dans GOPATH/bin Générez le fichier protoc-gen-go.exe
3. Créez un fichier test.proto
//指定版本 //注意proto3与proto2的写法有些不同 syntax = "proto3"; //包名,通过protoc生成时go文件时 package test; //手机类型 //枚举类型第一个字段必须为0 enum PhoneType { 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. Exécutez la commande suivante
> protoc --go_out=. *.proto
pour générer. un fichier test.pb.go
5. Utilisez protobuf en go languepour plus de connaissances en langue go, veuillez faire attention à Site Web PHP chinoisTutoriel de langue Go Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!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();
}