golang 安装 protoc
更新时间:2023-10-22什么是 Protobuf?
Protobuf(全称为 Protocol Buffers)是一种轻便高效的数据存储格式,以及用于通信协议的格式,由 Google 开发并开源。与 XML 和 JSON 不同,Protobuf 是一种二进制格式,其优势在于占用空间小、解析速度快、可扩展性强。这些优点也使得 Protobuf 变得越来越受欢迎。
然而,Protobuf 本身是一种数据格式,要想在程序中使用它,需要一个对应的解析器。本文将介绍如何在 Go 语言中安装 protoc,从而在代码中使用 Protobuf 格式。
安装 protoc
protoc 是 Protocol Buffers 的编译器,在使用 Protocol Buffers 格式时,需要将其编译成相应语言的代码。下面介绍如何在 Go 语言中安装 protoc。
第一步,从官网下载 protoc 的最新版本:https://github.com/protocolbuffers/protobuf/releases。
$ wget https://github.com/protocolbuffers/protobuf/releases/download/3.17.3/protobuf-all-3.17.3.zip
第二步,解压下载下来的 zip 包并进入解压后的目录。然后将 bin 目录添加到 PATH 环境变量中,这样就可以全局使用 protoc 命令了。
$ unzip protobuf-all-3.17.3.zip $ cd protobuf-all-3.17.3 $ export PATH=$PATH:`pwd`/bin
使用 protoc 编译 proto 文件
使用 Protocol Buffers 格式时,需要将 .proto 文件编译成 Go 语言中可以使用的代码。下面介绍如何使用 protoc 编译 proto 文件。
假设有以下 .proto 文件,文件名为 message.proto:
syntax = "proto3"; package main; message SimpleMessage { string id = 1; string name = 2; }
使用以下命令可以将 message.proto 编译成 Go 语言中使用的代码。需要指定输出目录和使用的语言,此处为 Go 语言。
$ protoc --go_out=. message.proto
此时会在当前目录生成一个 message.pb.go 文件,该文件包含了 SimpleMessage 结构体的定义和一些编解码方法,可以在 Go 语言代码中使用。
在 Go 语言代码中使用 Protobuf 格式
编译完 .proto 文件后,就可以在 Go 语言代码中使用编译后的代码了。下面简单介绍一下如何在 Go 中使用 Protobuf 格式。
首先,在 Go 代码中引入刚刚编译的 message.pb.go 文件:
import ( "fmt" "github.com/golang/protobuf/proto" "path/to/message.pb" )
这个时候就可以使用 SimpleMessage 结构体了。例如,可以使用以下代码创建一个 SimpleMessage 实例并进行编码:
message := &main.SimpleMessage{ Id: "123", Name: "Simple Message", } data, err := proto.Marshal(message) if err != nil { fmt.Println("Error: ", err) }
在这个例子中,首先使用 SimpleMessage 结构体创建了一个 message 实例,然后使用 proto.Marshal() 方法将 message 编码成二进制格式。如果出现编码错误,就会输出错误信息。
同样地,可以使用 proto.Unmarshal() 方法将二进制格式解码成 SimpleMessage 结构体:
message := &main.SimpleMessage{} err := proto.Unmarshal(data, message) if err != nil { fmt.Println("Error: ", err) }
这个例子中,首先创建一个空的 SimpleMessage 实例,然后使用 proto.Unmarshal() 方法将 data 解码到 message 中。如果出现解码错误,就会输出错误信息。