首页 >后端开发 >Golang > 正文

golang使用protobuf的方法详解

转载2020-01-15 17:28:1501079

1、下载protobuf的编译器protoc

地址:https://github.com/google/protobuf/releases

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
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、运行如下命令

> 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();
}

1.jpg更多go语言知识请关注PHP中文网go语言教程栏目。

以上就是golang使用protobuf的方法详解的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码
  • 相关标签:golang
  • 本文转载于:博客园,如有侵犯,请联系a@php.cn删除
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • golang使socket中文乱码:可以使go官golang.org/x/text包对中文进行转码来决。
    本文为大家细介绍了js中switch语句使,具有一定参考价值,希望可以帮助到大家。js中switch语句于基于不同条件执行不同动作。
    本文由java开发入门栏目为大家介绍final关键字使,希望可以帮助到正在学习同学。使:1、修饰类;2、修饰成员;3、修饰基本变量类型;4、修饰引变量;5、修饰常量。
    这篇文章主要介绍了php中使session防止户非登录后台细分析了session防止户非登录后台原理与相关实现技巧,需要朋友可以参考下。
    excel使规划求:首先在“数据”选项卡上“分析”组中,单击“规划求”;然后在“可加载项”框中,勾选“规划求加载项”并单击“确定”;接着在“设置目标”框中,输入目标单元格单元格引或名称
    golang grpc无安装原因可能是没有安装protoc。
    本篇文章给大家介绍一些使Premiere问题和。有一定参考价值,有需要朋友可以参考一下,希望对大家有所帮助。
    在java中可以使【append()】函数追加一个数据,该函数于将需要字符串复制到新数组中,其语是【append(String s)】,其参数s表示追加字符串。
    本文来自java快速入门栏目,文中为大家介绍了private关键字使,具有一定参考价值,希望对大家有所帮助。private关键字不能分配给外部类和接口使
    golang可以使go-micro来实现微服务,go-micro是go语言下一个很好rpc微服务框架,功能很完善;它默认实现了consul作为服务发现,通过http进行通信,通过protobuf
    这篇文章主要介绍了关于实现PHP使file_get_contents发送http请求功能简单,有着一定参考价值,现在分享给大家,有需要朋友可以参考一下本文实例讲述了PHP使file_get_contents
    这篇文章介绍内容是关于php内置函数使 compact() ,有着一定参考价值,现在分享给大家,有需要朋友可以参考一下
    本文章从session声明到session销毁和session 配置及回收机制了,以及一些常例子,希望本文章能帮助到大家哦。
    本文主要介绍了如何使Docker构建PHP开发环境,文中作者也探讨了构建基于Docker开发环境应该使单容器还是多容器,各有什么利弊。推荐PHP开发者阅读。希望对大家有所帮助。
    php_rar.dll扩展有没有类似php_zip.dllzip_entry_read函数php_zip.dllzip_entry_read函数 在不情况下直接读取压缩包内具体文件内容在php_rar.dll
    在php中Session经常来验证户注册或登录之后验证了,下面我来总结session变量一些常实例与介绍。
    本篇文章给大家分享内容是关于使Golang实现PHPAddslashes和Stripslashes ,有着一定参考价值,有需要朋友可以参考一下
    本文为大家细介绍了js数组slice(),具有一定参考价值,希望可以帮助到大家。slice()能基于当前数组中一个或多个创建一个新数组,可以接受一或两个参数,即要返回起始和结束位置。
    golang json乱码:在golang程序中使"encoding/json"包对json对象进行编码码来决。
    一.注册pusher;二.配置pusher;三.建立事件;四.广播.

    专题推荐

    推荐视频教程
  • Go编程基础视频教程Go编程基础视频教程
  • Go参考手册Go参考手册
  • Go 中文开发手册Go 中文开发手册
  • go语言基础与基本函数go语言基础与基本函数
  • 视频教程分类