protoc结合go完成protocol buffers协议的序列化与反序列化

下载protoc编译器

ps: 根据平台选择需要的编译器,这里选择windows

  • 解压
  • 加入环境变量

安装go专用protoc生成器

https://blog.csdn.net/qq_36940806/article/details/135017748?spm=1001.2014.3001.5501

创建go项目,模拟proto buffer 序列化与反序列化

  • 安装Protocol Buffers 插件
  • 创建proto文件,路径:pbfile/user.proto

user.proto 内容:

bash 复制代码
// proto语法版本
syntax = "proto3";

// 生成go文件所属包名
option go_package = "./service";

// 指定文件生成出来的package
package service;

// 消息
message User{
  string username = 1;
  int32 age = 2;
}
  • 执行 protoc生成 pb.go 文件
bash 复制代码
protoc --go_out=./ .\pbfile\user.proto

生成文件内容:service/user.pb.go

  • 创建main.go,进行序列化与反序列化
go 复制代码
package main

import (
	"github.com/golang/protobuf/proto"
	"go-grpc/service"
	"log"
)

func main() {

	user := &service.User{
		Username: "test",
		Age:      23,
	}

	// 序列化
	marshal, err := proto.Marshal(user)
	if err != nil {
		log.Fatal(err)
	}

	// 反序列化
	newUser := &service.User{}
	err = proto.Unmarshal(marshal, newUser)
	if err != nil {
		log.Fatal(err)
	}
	log.Println(newUser)
}
  • 执行main.go
相关推荐
草莓熊Lotso4 分钟前
Qt 进阶核心:UI 开发 + 项目解析 + 内存管理实战(从 Hello World 到对象树)
运维·开发语言·c++·人工智能·qt·ui·智能手机
2501_9418656310 分钟前
从事件驱动到异步架构的互联网工程语法构建与多语言实践分享
java·开发语言·jvm
前端 贾公子3 小时前
v-if 与 v-for 的优先级对比
开发语言·前端·javascript
行百里er5 小时前
2026:一名码农的“不靠谱”年度规划
后端·程序员·架构
嗯嗯=5 小时前
python学习篇
开发语言·python·学习
不会c嘎嘎7 小时前
QT中的常用控件 (二)
开发语言·qt
计算机程序设计小李同学7 小时前
基于SpringBoot的个性化穿搭推荐及交流平台
java·spring boot·后端
是一个Bug7 小时前
50道核心JVM面试题
java·开发语言·面试
用户47949283569157 小时前
同事一个比喻,让我搞懂了Docker和k8s的核心概念
前端·后端
她和夏天一样热8 小时前
【观后感】Java线程池实现原理及其在美团业务中的实践
java·开发语言·jvm