Skip to content

Commit 630ee59

Browse files
authored
Feature: Protobuf-go (#174)
* protobuf-go: Update protobuf version * protobuf-go: Add protobuf serializer * protobuf-go: Register protobuf-go * protobuf-go: Regenerate the report * protobuf-go: Add new line
1 parent f5707e5 commit 630ee59

File tree

7 files changed

+608
-316
lines changed

7 files changed

+608
-316
lines changed

benchmarks.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
msgpacktinylib "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/msgpack_tinylib"
2828
msgpackvmihailenco "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/msgpack_vmihailenco"
2929
"github.com/alecthomas/go_serialization_benchmarks/internal/serializers/mus"
30+
"github.com/alecthomas/go_serialization_benchmarks/internal/serializers/protobuf"
3031
protobufdedis "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/protobuf_dedis"
3132
"github.com/alecthomas/go_serialization_benchmarks/internal/serializers/pulsar"
3233
"github.com/alecthomas/go_serialization_benchmarks/internal/serializers/sereal"
@@ -260,6 +261,13 @@ var benchmarkCases = []BenchmarkCase{
260261

261262
TimeSupport: TSNoSupport,
262263
APIKind: AKCodegen,
264+
}, {
265+
Name: "protobuf-go",
266+
URL: "github.com/protocolbuffers/protobuf-go",
267+
New: protobuf.NewProtobufSerializer,
268+
269+
TimeSupport: TSRFC3339Ns,
270+
APIKind: AKCodegen,
263271
}, {
264272
Name: "gogo/protobuf",
265273
URL: "github.com/gogo/protobuf/proto",

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ require (
3232
github.com/vmihailenco/msgpack/v5 v5.3.5
3333
go.dedis.ch/protobuf v1.0.11
3434
go.mongodb.org/mongo-driver v1.11.1
35-
google.golang.org/protobuf v1.28.1
35+
google.golang.org/protobuf v1.34.2
3636
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
3737
wellquite.org/bebop v0.0.0-20231109192402-a92af83691ec
3838
)

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU
8585
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
8686
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
8787
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
88-
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
8988
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
9089
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
9190
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -471,9 +470,8 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx
471470
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
472471
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
473472
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
474-
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
475-
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
476-
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
473+
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
474+
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
477475
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
478476
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
479477
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package protobuf
2+
3+
import (
4+
"time"
5+
6+
"google.golang.org/protobuf/proto"
7+
8+
"github.com/alecthomas/go_serialization_benchmarks/goserbench"
9+
)
10+
11+
type Protobuf struct {
12+
a ProtobufGo
13+
14+
// marshaller and unmarshaller are set on creation to either binary
15+
// or json marshallers.
16+
marshaller func(proto.Message) ([]byte, error)
17+
unmarshaller func([]byte, proto.Message) error
18+
}
19+
20+
func (s *Protobuf) Marshal(o interface{}) ([]byte, error) {
21+
v := o.(*goserbench.SmallStruct)
22+
a := &s.a
23+
a.Name = v.Name
24+
a.BirthDay = v.BirthDay.UnixNano()
25+
a.Phone = v.Phone
26+
a.Siblings = int32(v.Siblings)
27+
a.Spouse = v.Spouse
28+
a.Money = v.Money
29+
return s.marshaller(a)
30+
}
31+
32+
func (s *Protobuf) Unmarshal(d []byte, o interface{}) error {
33+
a := &s.a
34+
*a = ProtobufGo{}
35+
36+
err := s.unmarshaller(d, a)
37+
if err != nil {
38+
return err
39+
}
40+
41+
v := o.(*goserbench.SmallStruct)
42+
v.Name = a.Name
43+
v.BirthDay = time.Unix(0, a.BirthDay)
44+
v.Phone = a.Phone
45+
v.Siblings = int(a.Siblings)
46+
v.Spouse = a.Spouse
47+
v.Money = a.Money
48+
return nil
49+
}
50+
51+
func NewProtobufSerializer() goserbench.Serializer {
52+
return &Protobuf{
53+
marshaller: proto.Marshal,
54+
unmarshaller: proto.Unmarshal,
55+
}
56+
}

internal/serializers/protobuf/structdef-protobuf.pb.go

Lines changed: 194 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
syntax = "proto3";
2+
3+
package goserbench;
4+
5+
option go_package = "github.com/alecthomas/go_serialization_benchmarks/internal/protobuf;protobuf";
6+
7+
message ProtobufGo{
8+
string name = 1;
9+
int64 birthDay = 2;
10+
string phone = 3;
11+
int32 siblings = 4;
12+
bool spouse = 5;
13+
double money = 6;
14+
}

0 commit comments

Comments
 (0)