golang protobuf 安装
更新时间:2023-11-10前言
Go语言是一门非常优秀的编程语言,而且在性能和并发性能上相比其他编程语言,更具优势。而Google公司也推出了一种插件化的调用方式Protocol Buffer,它基于Google公司内部使用的编解码技术,能够将结构化的数据序列化。同时,Protocol Buffer技术还具备跨语言且非常高效的特性,因此很多系统都采用这种技术来完成数据交换,本篇文章将详细介绍使用golang搭建protobuf的过程,让gopher们对此有一个更加深入的理解。
第一部分 安装protoc
在安装过程中使用的protoc,是将proto文件生成相应代码的工具。它是Protocol Buffers的编译器,它会读取proto文件,并将其转换为指定语言的数据结构和代码。
# 下载protoc $ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protoc-3.17.3-linux-x86_64.zip # 解压 $ sudo unzip protoc-3.17.3-linux-x86_64.zip -d /usr/local/protoc
可以通过输入protoc --version命令,验证protoc是否安装正确。
$ protoc --version libprotoc 3.17.3
第二部分 升级Go
在使用golang编写protobuf协议时,golang的版本必须在1.11及以上,因此需要升级Go的版本。
# 下载Go安装包并解压 $ wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz $ tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz # 配置GOPATH $ mkdir $HOME/demo $ vim ~/.bashrc # 编辑 .bashrc export GOPATH=$HOME/demo export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin # 刷新配置 $ source ~/.bashrc
可以通过输入go version 命令,验证Go是否安装正确。
$ go version go version go1.16.6 linux/amd64
第三部分 安装protobuf的Go插件
安装protobuf的Go插件前,还需要安装一下三个package。
$ go get -u github.com/golang/protobuf/proto $ go get -u github.com/golang/protobuf/protoc-gen-go $ go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc
安装完成后,检查 $GOPATH/bin 下是否有 protoc-gen-go 和 protoc-gen-go-grpc 两个文件。
$ ls $GOPATH/bin protoc-gen-go protoc-gen-go-grpc
第四部分 编写golang代码
编写golang代码前,需要创建一个 .proto 文件。这个文件定义了数据类型和数据结构,比如一个 Person 对象。
syntax = "proto3"; message Person { string name = 1; int32 id = 2; string email = 3; }
然后,通过protoc编译生成Go代码。
protoc --go_out=. *.proto
编写Go代码,如下:
package main import ( "context" "fmt" "github.com/flish/flish_tools/proto" "google.golang.org/grpc" ) func main() { serverAddr := "localhost:8080" clientConn, err := grpc.Dial(serverAddr, grpc.WithInsecure())// 连接grpc后端服务端 if err != nil { fmt.Printf("connect err : %+v", err) return } defer clientConn.Close() serviceClient := proto.NewTestServiceClient(clientConn) message := proto.TestRequest{ Name: "chfxi", } resp, err := serviceClient.Test(context.Background(), &message) if err != nil { fmt.Printf("err is %+v", err) return } fmt.Printf("resp is %+v", resp) }
这个Go代码实现的是根据test.proto编写改写后的test.pb.go。Test函数是在test.pb.go文件里由proto3定义。client需要创建gRPC连接并构建请求,然后得到响应。
总结
本文详细介绍了如何使用golang搭建protobuf的过程,包括安装protoc,升级Go版本,安装protobuf的Go插件,以及编写golang代码,希望这篇文章对于大家了解protobuf技术有所帮助,并在此基础上可以实现更多应用。