Protobuf 认识和使用(window版)

1、protobuf 的安装

1、安装protobuf

GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format

如下载protobuf v3.20.1 的版本
下载protobuf https://github.com/protocolbuffers/protobuf/releases/tag/v3.20.1
这里我下载的 protoc-3.20.1-win64.zip
减压并将解压得到的文件中的bin目录路径添加到系统变量中

查看版本

protoc --version

2、protobuf的go语言插件protoc-gen-go插件

go install github.com/golang/protobuf/protoc-gen-go@latest

 检查是否安装成功

go env 获取GOPATH的路径,在对应路径查询bin目录是否存在protoc-gen-go.exe

 

同时检查一下bin目录是否准确配置了环境变量不然也会导致命令没有找到提示

 2、protobuf 简单语法

参考文档 (需科学上网) : https://developers.google.com/protocol-buffers/docs/proto3
首先让我们看一个非常简单的例子。

syntax = "proto3";                        //指定版本信息,不指定会报错,默认是proto2
option go_package = "./;userinfo"; //分号前面的表示当前.proto文件所在的路径,分号后面表示生成go文件的包名
//message定义一种消息类型,关键字message定义结构,并且结构中可以嵌套定义结构,message定义的内容和生成一个结构体
message userinfo{
  // 名字
  string username = 1;
  // 年龄
  int32  age = 2 ;
  //爱好
  repeated string hobby = 3; // 数组 golang中会生成string类型的切片
}

 3、protobuf 基本编译

protobuf编译是通过编译器protoc进行的,通过这个编译器,我们可以把.proto文件生成
go,Java,Python,C++,Ruby,JavaNano, Objective-C,或者C# 代码,生成命令如下:

protoc --proto_path=IMPORT_PATH --go_out=DST_DIR path/to/file.proto

1.--proto_path=IMPORT_PATH,IMPORT_PATH是.proto 文件所在的路径,如果忽略则默认
当前目录。如果有多个目录则可以多次调用--proto_path,它们将会顺序的被访问并执行导入
2.--go_out=DST_DIR,指定了生成的go语言代码文件放入的文件夹
3.允许使用 protoc -go_out=./ *proto 的方式一次性编译多个.proto 文件
4.go语言编译时,protobuf 编译器会把 .proto 文件编译成.pd.go 文件

一般在使用的时候我们都是使用下面这种简单的命令:

protoc --go_out=./ *.proto

编写执行后会在指定目录生成文件

4、protobuf 序列化反序列化

 在main.go进行演示

package main

import (
	"fmt"
	"go-micro/protoc_demo/proto/userService"
	"google.golang.org/protobuf/proto"
)

func main() {
	fmt.Println("aaa")
	u := &userService.Userinfo{
		Username: "TGG",
		Age:      18,
		Hobby:    []string{"游泳", "打游戏"},
	}

	// Protobuf 序列化
	data, _ := proto.Marshal(u)
	fmt.Println(data)

	// Protobuf 反序列化
	user := userService.Userinfo{}
	proto.Unmarshal(data, &user)

	fmt.Printf("%#v", user)
}

在终端执行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值