胖sir:不知道你有没有这样的疑惑,工做中发现不少新接触GO的小伙伴安装protoc的环境须要折腾好久git
刚开始我装环境的时候也是花了好长时间,最后如何装好的也不知缘由,网上查找了各类资源,也没有一篇文章能够很好的解决这个问题.github
兵长:这个好说,今天我们就来梳理和总结一下,如何快速高效的安装好protoc的环境golang
前提,先介绍一下protoc是干啥的?数据库
简而言之,protoc是用于将proto文件编程成各类语言源码文件的工具编程
例如此处咱们能够将proto
文件经过protoc工具,编译生成适用于GO语言开发的源码文件xxx.pb.go
,通常会和GRPC进行配套使用,若是对这个感兴趣,能够在后台留言哦,此处暂且先单一说明一下protoc的环境如何一次性搞定windows
目前看来windows上的protoc安装相对来讲疑问仍是比较多的,其实安装仍是很是简单的,咱们就来讲说吧app
例如:要是不知道GOPATH在哪里获取, 能够在终端里面敲入 go env
进行查看工具
go get github.com/golang/protobuf
若如上命令执行失败,请配置代理ui
go env -w GO111MODULE=on //打开模块 go env -w GOPROXY=https://goproxy.cn,direct //启用代理
go build go install
执行以后,看到本身GOPATH/bin
目录下会生成以下程序,说明环境配置成功
目录结构为:
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插件,具体的使用方式,感兴趣的能够后台私信小魔童哪吒哦
以上为本期所有内容,若有疑问能够在评论区或后台提出你的疑问,咱们一块儿交流,一块儿成长。
好家伙要是文章对你还有点做用的话,请帮忙点个关注,分享到你的朋友圈,分享技术,分享快乐
技术是开放的,咱们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
做者:小魔童哪吒