Golang 集成 Protobuf 及 vscode 配置

栏目: Go · 发布时间: 6年前

内容简介:在存储相对复杂的结构体时 protobuf 比 json 更高效,而且方便后期字段扩展。我们可以将数据用 protobuf 序列化后存入 mysql 或 redis 中注意: 如果不指定版本,会使用 master 分支,而 dep 等包管理工具,会优先拉取 release 的版本,导致编译出的 protoc-gen-go 与 vendor 里的源码版本不一致,最终编译报错

在存储相对复杂的结构体时 protobuf 比 json 更高效,而且方便后期字段扩展。

我们可以将数据用 protobuf 序列化后存入 mysqlredis

一、安装 Protobuf

  1. 拉取项目
$ go get -d -u github.com/golang/protobuf/protoc-gen-go
  1. 切换到 release 版本
$ git -C "$(go env GOPATH)"/src/github.com/golang/protobuf checkout v1.2.0

注意: 如果不指定版本,会使用 master 分支,而 dep 等包管理工具,会优先拉取 release 的版本,导致编译出的 protoc-gen-go 与 vendor 里的源码版本不一致,最终编译报错

替代方案:如果此处不指定版本,可以在 dep 的配置文件 gopkg.toml 里指定为 master

[[override]]
  branch = "master"
  name = "github.com/golang/protobuf"
  1. 编译安装
$ go install github.com/golang/protobuf/protoc-gen-go

二、项目中创建 proto 文件

  1. 定义 proto 对象
$ vim protos/protos.pb.go
syntax = "proto3";

package protos;

message Info {
  uint32 UID = 1;
  int32 Power = 3;
  int64 StartedAt = 4;
  double OutputMoney = 7;
}
  1. 编译成 go 文件
$ protoc --go_out=. protos/*.proto
  1. 代码里使用
import (
    "time"
    "demo-api/protos"

    "github.com/golang/protobuf/proto"
)

// 序列化
obj := protos.Info{
  UID: 1,
  Power: 2,
  StartedAt: time.Now().Unix(),
  OutputMoney: 0,
}
data, err := proto.Marshal(obj)
Check(err)

// 反序列化
var info protos.Info
err = proto.Unmarshal(data, &info)
Check(err)

三、VSCode 自动提示和格式化

安装插件 vscode-proto3 及其依赖的 Clang-Format

如果存在报错 clang-format not installed ,需要在系统里安装 clang-format

# MacOS可以直接通过brew安装
$ brew install clang-format

四、总结

  1. 时间类型

    golang 里的 time.Time,protobuf 也可以支持,但是我不希望在代码里做额外的类型转换,所有 proto 里的时间都定义成了 int64,用来存储 unix timestamp

  2. Uid 和 UID 的问题

    这是 golang 里比较恶心的问题,proto 里如果变量名为 uid,编译后会转换为 Uid,而自家的 golang 规范却要求的是 UID,所以我们再 proto 里可以直接命名为 UID

  3. int 和 int32

    protobuf 不支持 int,所以在 golang 里与 proto 对应的字段都由 int 改成了 int32, 减少强制转换次数


以上所述就是小编给大家介绍的《Golang 集成 Protobuf 及 vscode 配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms and Data Structures

Algorithms and Data Structures

Kurt Mehlhorn、Peter Sanders / Springer / 2008-08-06 / USD 49.95

Algorithms are at the heart of every nontrivial computer application, and algorithmics is a modern and active area of computer science. Every computer scientist and every professional programmer shoul......一起来看看 《Algorithms and Data Structures》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换