您现在的位置是:网站首页> 编程资料编程资料
Goland中Protobuf的安装、配置和使用_Golang_
2023-05-26
403人已围观
简介 Goland中Protobuf的安装、配置和使用_Golang_
引言
本文记录了mac环境下protobuf的编译安装,并通过一个示例来演示proto自动生成go代码。
本文使用的mac os 12.3系统,不建议使用homebrew安装,系统版本太高,会安装报错,所以自己下载新版压缩包编译构建安装。
1、安装protobuf编译器
在 官方github 选择适合自己系统的Proto编译器程序进行下载安装
本文使用的mac os 12.3系统,不建议使用homebrew安装,系统版本太高,会报错,所以自己下载压缩包构建安装。
- 下载地址:链接: https://pan.baidu.com/s/1NIMErRKrP3-DNmvA8SgKxg 提取码: 27av
如需压缩包请在评论区留言。
2.在/usr/local/下新建文件夹protobuf
3.将下载文件拷贝到:/usr/local/protobuf/
4.配置环境变量:
vim ~/.bash_profile
增加:
# protobuf export PROTOBUF=/usr/local/protobuf export PATH=$PROTOBUF/bin:$PATH
使环境变量生效:
source ~/.bash_profile
解压:
tar zxvf protobuf-all-3.20.1.tar.gz
cd 进入 protobuf-3.20.1/目录下,在终端按顺序执行:
sudo ./configure sudo make sudo make check sudo make install
执行命令:protoc --version 检查是否安装成功

2、下载protobuf的golang支持库,安装protoc-gen-go
protoc-gen-go用来将 .proto 文件转换为 Golang 代码。
在终端运行命令:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
这条命令会安装,并将protoc-gen-go可执行文件复制到$GOBIN文件夹下

注意:原来的github.com/golang/protobuf/protoc-gen-go这个库已经被弃用,我们需要使用 google.golang.org/protobuf 这个库
% go get -u github.com/golang/protobuf/protoc-gen-go go: module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead. go: added github.com/golang/protobuf v1.5.2 go: added google.golang.org/protobuf v1.28.0
3、protobuf使用示例
1、新建一个go moudle项目,创建扩展名为.proto的文件,并编写代码。比如创建idl/user.proto文件,内容如下:
syntax = "proto3"; package user; option go_package ="./user"; message User { int64 user_id = 1; string user_name = 2; string password = 3; }2、编译.proto文件,生成Go语言文件。执行如下命令:
protoc --go_out=. ./idl/*.proto
将会自动生成对应的user目录,存放生成的user.pb.go文件:

3、在main程序中使用Protobuf生成的代码:
使用proto将user序列化输出out,在将out反序列化成user
package main import ( "encoding/json" "fmt" "github.com/starine/go-protoc-example/user" "google.golang.org/protobuf/proto" "log" ) func main() { fmt.Println("Hello World. \n") user1 := user.User{} user1.Password = "123456" user1.UserName = "starine" bytes, _ := json.Marshal(user1) fmt.Println(string(bytes)) //序列化user结构体数据 out, err := proto.Marshal(&user1) if err != nil { log.Fatalln("Failed to encode User:", err) } fmt.Println(out) //反序列化user结构体 user2 := user.User{} err = proto.Unmarshal(out, &user2) if err!=nil { log.Fatalln("Failed to parse User:", err) } bytes, _ = json.Marshal(user2) fmt.Println(string(bytes)) }运行结果:
% go run main.go
Hello World.{"user_name":"starine","password":"123456"}
[18 7 115 116 97 114 105 110 101 26 6 49 50 51 52 53 54]
{"user_name":"starine","password":"123456"}Process finished with the exit code 0
到此这篇关于Goland中Protobuf的安装、配置和使用的文章就介绍到这了,更多相关Protobuf安装使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- GoFrame gredis缓存DoVar及Conn连接对象的自动序列化_Golang_
- Go slice切片make生成append追加copy复制示例_Golang_
- Go slice切片使用示例详解_Golang_
- Go语言func匿名函数闭包示例详解_Golang_
- 适合PHP同学的GoFrame框架使用体验及学习建议_Golang_
- GoFrame代码优化gconv类型转换避免重复定义map_Golang_
- GoFrame gredis配置文件及配置方法对比_Golang_
- GoFrame框架gcache的缓存控制淘汰策略实践示例_Golang_
- gtoken替换jwt实现sso登录的排雷避坑_Golang_
- Go语言日志内聚复用及gjson踩坑记录分享_Golang_
