FastPB
A faster Protobuf serializer & deserializer.
Attention
- only proto3 is supported now.
- known-types(any, api, duration…) is not supported now.
Install
go >= 1.16
go install github.com/cloudwego/fastpb/protoc-gen-fastpb@latest
go <= 1.15
go get github.com/cloudwego/fastpb/protoc-gen-fastpb@latest
Usage
Refer to examples, use in two steps:
- use fastpb to generate code. (refer here)
- use fastpb API to marshal/unmarshal. (refer here)
Step 1: Generate Code
Using the command line tool to generate code:
protoc --go_out=. \
--fastpb_out=. \
${your_idl}.proto
or
protoc --go_opt=paths=source_relative --go_out=. \
--fastpb_opt=paths=source_relative --fastpb_out=. \
${your_idl}.proto
Step 2: Codec Message
Encoding and Decoding must use fastpb’s API, shown as demo:
package examples
import (
"github.com/cloudwego/fastpb"
)
// Marshal .
func Marshal(msg fastpb.Writer) []byte {
// TODO: buffer can be reused.
buf := make([]byte, msg.Size())
msg.FastWrite(buf)
return buf
}
// Unmarshal .
func Unmarshal(buf []byte, msg fastpb.Reader) error {
_, err := fastpb.ReadMessage(buf, int8(fastpb.SkipTypeCheck), msg)
return err
}