Skip to content

weibreeze/breeze-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

bae969d · Sep 12, 2019

History

13 Commits
Apr 15, 2019
Apr 16, 2019
Apr 15, 2019
Sep 12, 2019
Jul 31, 2019
Jul 31, 2019
Apr 17, 2019
Aug 1, 2019
Aug 9, 2019
Sep 12, 2019
Apr 15, 2019
May 13, 2019
Apr 15, 2019
Jul 31, 2019
Jul 31, 2019
Aug 1, 2019

Repository files navigation

Breeze-go

License Build Status codecov GoDoc Go Report Card

概述

Breeze是一个跨语言序列化协议与服务描述的schema,与protobuf类似,但更加易用并且提供对旧对象的兼容能力。 Breeze-go是Breeze的go语言版本。

快速入门

  1. 添加依赖
    go get github.com/weibreeze/breeze-go
  1. 基础类型编解码
    // 编码
    s := "just test"
    buf := breeze.NewBuffer(256)
    breeze.WriteString(buf, s, true)
    // 解码
    var ns string
    err := breeze.ReadString(breeze.CreateBuffer(buf.Bytes()), &ns)
    fmt.Printf("result:%s, err:%v\n", ns, err)

在明确知道类型的场景下,基础类型使用对应的编解码方法效率最高。

  1. 集合类型编解码
    // 编码
    m := make(map[int][]string, 16)
    m[11] = []string{"a1", "a2"}
    m[789] = []string{"a3", "a4"}
    buf := breeze.NewBuffer(256)
    breeze.WriteValue(buf, m)
    // 解码方法一
    nm := make(map[int][]string, 16)
    _, err := breeze.ReadValue(breeze.CreateBuffer(buf.Bytes()), &nm)
    fmt.Printf("result:%v, err:%v\n", nm, err)
    // 解码方法二
    i, err := breeze.ReadValue(breeze.CreateBuffer(buf.Bytes()), nil)
    fmt.Printf("result:%v, err:%v\n", i, err)

WriteValueReadValue可以实现任意类型对象的编解码,包括基础类型。

解码方法一使用变量地址作为入参,是推荐的解码方式;解码方法二适合不知道具体解码类型的场景,此时通过方法返回值获取解码结果。

  1. Breeze Message编解码
    // 编码
    msg := breeze.GetBenchData(1)
    buf := breeze.NewBuffer(256)
    breeze.WriteValue(buf, msg)
    // 解码
    var result breeze.TestMsg
    _, err := breeze.ReadValue(breeze.CreateBuffer(buf.Bytes()), &result)
    fmt.Printf("result:%v, err:%v\n", result, err)

使用Breeze Schema生成Message类

参见breeze-generator

Breeze协议说明

参考Breeze协议说明