c语言编程笔录

首页 >   > 笔记大全

笔记大全

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技术有所帮助,并在此基础上可以实现更多应用。