在go语言中安装与使用protobuf的方法详解
发布时间 - 2026-01-11 02:48:04 点击率:次简介

本文主要给大家介绍了关于go语言安装使用protobuf的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
protobuf是Google开发出来的一个语言无关、平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用。通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构。这就是protobuf神奇的地方。并且,它的通信效率极高,“一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一”。
安装
编译安装protobuf的编译器protoc
wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1./configure make make install
执行 protoc -h 查看安装是否成功
安装插件 protoc-gen-go,它是一个go程序,编译它之后将可执行文件执行路径写入环境变量
go get github.com/golang/protobuf/protoc-gen-go
获取proto包
go get github.com/golang/protobuf/proto
在go中使用
protobuf的使用方法是将数据结构写入到.proto文件中,使用protoc编译器编译(间接使用了插件)得到一个新的go包,里面包含go中可以使用的数据结构和一些辅助方法。
编写test.proto文件
package example;
enum FOO { X = 17; };
message Test {
required string label = 1;
optional int32 type = 2 [default=77];
repeated int64 reps = 3;
optional group OptionalGroup = 4 {
required string RequiredField = 5;
}
}
编译:
执行 protoc --go_out=. *.proto 生成 test.pb.go 文件
将test.pb.go文件放入example文件夹(对应上面package)中,作为example包
try
package main
import (
"log"
"github.com/golang/protobuf/proto"
"example"
)
func main() {
test := &example.Test {
Label: proto.String("hello"),
Type: proto.Int32(17),
Reps: []int64{1, 2, 3},
Optionalgroup: &example.Test_OptionalGroup {
RequiredField: proto.String("good bye"),
},
}
data, err := proto.Marshal(test)
if err != nil {
log.Fatal("marshaling error: ", err)
}
newTest := &example.Test{}
err = proto.Unmarshal(data, newTest)
if err != nil {
log.Fatal("unmarshaling error: ", err)
}
// Now test and newTest contain the same data.
if test.GetLabel() != newTest.GetLabel() {
log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
}
//test.GetOptionalgroup().GetRequiredField()
//etc
}
一些对应关系
- message Test对为 struct 结构,其属性字段有了对应的get方法,在go中可以使用
test.GetLabel()、test.GetType()获取test对象的属性 - OptionalGroup对应为 struct中的内嵌struct
- proto文件中repeated属性对于slice结构
test.Reset()可以使其所有属性置为0值- 使用Marshal和Unmarshal可以轻松的编码和解码
这些只是一些特性,想要仔细研究可以查看github上的wiki:https://github.com/golang/protobuf
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# go
# protobuf
# 使用
# 生成go
# Go语言结合grpc和protobuf实现去中心化的聊天室
# Go语言使用protojson库实现Protocol Buffers与JSON转换
# Go语言中的数据格式(json、xml 、msgpack、protobuf)使用总结
# go语言中proto文件的使用
# 数据结构
# 可以使用
# 序列化
# 服务端
# 的是
# 客户端
# 相关内容
# 说了
# 这就是
# 不多
# 它是
# 给大家
# 使其
# 这篇文章
# 极高
# 谢谢大家
# 转化为
# 将可
# 可以查看
# 就可以
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何为API编写文档_Laravel API文档生成与维护方法
制作电商网页,电商供应链怎么做?
如何在IIS7上新建站点并设置安全权限?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何用腾讯建站主机快速创建免费网站?
如何彻底卸载建站之星软件?
简单实现jsp分页
如何在阿里云服务器自主搭建网站?
JavaScript如何实现错误处理_try...catch如何捕获异常?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
,南京靠谱的征婚网站?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
高端企业智能建站程序:SEO优化与响应式模板定制开发
Laravel如何创建自定义Facades?(详细步骤)
Python文件操作最佳实践_稳定性说明【指导】
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何在宝塔面板中修改默认建站目录?
微信小程序 HTTPS报错整理常见问题及解决方案
EditPlus中的正则表达式 实战(4)
如何在云主机快速搭建网站站点?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何用AI帮你把自己的生活经历写成一个有趣的故事?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Bootstrap整体框架之JavaScript插件架构
实现点击下箭头变上箭头来回切换的两种方法【推荐】
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
海南网站制作公司有哪些,海口网是哪家的?
原生JS实现图片轮播切换效果
Linux系统命令中tree命令详解
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何续费美橙建站之星域名及服务?
Python制作简易注册登录系统
Laravel怎么实现模型属性的自动加密
如何用已有域名快速搭建网站?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
公司网站制作价格怎么算,公司办个官网需要多少钱?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Python进程池调度策略_任务分发说明【指导】
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面

