5个步骤搞定protoc环境安装
胖sir:不知道你有没有这样的疑惑,工作中发现很多新接触GO的小伙伴安装protoc的环境需要折腾很久。
刚开始我装环境的时候也是花了好长时间,最后如何装好的也不知原因,网上查找了各种资源,也没有一篇文章可以很好的解决这个问题.
小魔童:这个好说,今天咱们就来梳理和总结一下,如何快速高效的安装好protoc的环境
前提,先介绍一下protoc是干啥的?
简而言之,protoc是用于将proto文件编程成各种语言源码文件的工具
例如此处我们可以将proto
文件通过protoc工具,编译生成适用于GO语言开发的源码文件xxx.pb.go
,一般会和GRPC进行配套使用,如果对这个感兴趣,可以在后台留言哦,此处暂且先单一说明一下protoc的环境如何一次性搞定
目前看来windows上的protoc安装相对来说疑问还是比较多的,其实安装还是非常简单的,我们就来说说吧
windows 下安装go protoc
1、下载最新版的golang安装程序
https://github.com/protocolbuffers/protobuf/releases/
2、 解压,把GOPATH的路径添加到环境变量
例如:要是不知道GOPATH在哪里获取, 可以在终端里面敲入go env
进行查看
3、命令行执行
go get github.com/golang/protobuf
若如上命令执行失败,请配置代理
go env -w GO111MODULE=on //打开模块
go env -w GOPROXY=https://goproxy.cn,direct //启用代理
4、%GOPATH%/src/github.com/golang/protobufxxxxx/protoc-gen-go
go build
go install
执行之后,看到自己GOPATH/bin
目录下会生成如下程序,说明环境配置成功
5、开始使用protoc
目录结构为:
test.proto
syntax="proto3"; //版本号
package mypro; //包名
enum ClassName{ //枚举
class1=0; //标号 必须从 0开始
class2=1;
class3=2;
}
message Student{ //消息,对应于Go的结构体
string name=1; //1:标号,唯一 即可(相当于数据库中的Id,不一定要从1 ,2的顺序依次排列。)
int32 age=2; //必须指定整型的范围,如int32,int64
string address=3;
ClassName cn=4;
}
message Students{
repeated Student person=1; // repeated 修饰,相当于Go中切片
string school=2;
}
执行:protoc --go_out=. *.proto , 会生成 .pb.go文件
main.go
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
"mypro.com/mypro" //引入的proto的包 , go语言中,一个目录里面的所有文件都应设置成一个包
)
func main() {
s1 := &mypro.Student{} //第一个学生信息
s1.Name = "jz01"
s1.Age = 23
s1.Address = "cq"
s1.Cn = mypro.ClassName_class2 //枚举类型赋值
ss := &mypro.Students{}
ss.Person = append(ss.Person, s1) //将第一个学生信息添加到Students对应的切片中
s2 := &mypro.Student{} //第二个学生信息
s2.Name = "jz02"
s2.Age = 25
s2.Address = "cd"
s2.Cn = mypro.ClassName_class3
ss.Person = append(ss.Person, s2) //将第二个学生信息添加到Students对应的切片中
ss.School = "cqu"
fmt.Println("Students信息为:", ss)
// Marshal takes a protocol buffer message
// and encodes it into the wire format, returning the data.
buffer, _ := proto.Marshal(ss)
fmt.Println("序列化之后的信息为:", buffer)
// Use UnmarshalMerge to preserve and append to existing data.
data := &mypro.Students{}
proto.Unmarshal(buffer, data)
fmt.Println("反序列化之后的信息为:", data)
}
在main.go的同级目录 执行 go mod init xxx , 模块化 如:go mod init mypro.com
在main.go 同级目录 执行 go build , 若执行成功,则正确解析protobuf
当需要使用到grpc + protobuf的时候,protoc工具编译proto文件时,需要加上grpc插件,具体的使用方式,感兴趣的可以后台私信小魔童哪吒哦
以上为本期全部内容,如有疑问可以在评论区或后台提出你的疑问,我们一起交流,一起成长。
好家伙要是文章对你还有点作用的话,请帮忙点个关注,分享到你的朋友圈,分享技术,分享快乐
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
作者:小魔童哪吒
相关文章
- 图像处理工具Python扩展库,你了解吗?
- 十个常用的损失函数解释以及Python代码实现
- 30 个数据科学工作中必备的 Python 包
- 如何在 Windows 上安装 Python
- 几行 Python 代码就可以提取数百个时间序列特征
- 使用Python快速搭建接口自动化测试脚本实战总结
- 哪种编程语言最适合开发网页抓取工具?
- 不要在 Python 中使用循环,这些方法其实更棒!
- 震惊!用Python探索《红楼梦》的人物关系!
- 如何最简单、通俗地理解Python模块?
- 酷炫,Python实现交通数据可视化!
- 为什么急于寻找Python的替代者?
- 30 个数据工程必备的Python 包
- 去字节面试被面这题能答上来吗?谈谈你对时间轮的理解?
- 火山引擎在行为分析场景下的 ClickHouse JOIN 优化
- 用Python爬取了某宝1166家月饼数据进行可视化分析,终于找到最好吃的月饼~
- 在 Linux 上试试这个基于 Python 的文件管理器
- Python列表解析式到底该怎么用?
- 如何快速把你的 Python 代码变为 API
- 十个Python初学者常犯的错误