/protoc-gen-go-equal

protobuf plugin for generating go Equal methods

Primary LanguageGoMIT LicenseMIT

protoc-gen-go-equal

protoc-gen-go-equal is a protobuf plugin that generates Equal methods

Installation

go get github.com/melias122/protoc-gen-go-equal@latest

Benchmark

proto.Equal vs generated Equal

name                                  old time/op    new time/op    delta
EqualWithSmallEmpty-16                   885ns ± 1%       3ns ±31%   -99.65%  (p=0.016 n=4+5)
EqualWithIdenticalPtrEmpty-16           7.96ns ±37%    2.51ns ±33%   -68.44%  (p=0.008 n=5+5)
EqualWithLargeEmpty-16                  8.10µs ±26%    0.48µs ±37%   -94.11%  (p=0.008 n=5+5)
EqualWithDeeplyNestedEqual-16            184µs ±23%       7µs ± 2%   -95.93%  (p=0.016 n=5+4)
EqualWithDeeplyNestedDifferent-16       58.8µs ± 4%     1.2µs ± 2%   -97.98%  (p=0.016 n=5+4)
EqualWithDeeplyNestedIdenticalPtr-16    5.07ns ± 5%    2.27ns ± 1%   -55.12%  (p=0.016 n=5+4)

name                                  old alloc/op   new alloc/op   delta
EqualWithSmallEmpty-16                   88.0B ± 0%      0.0B       -100.00%  (p=0.008 n=5+5)
EqualWithIdenticalPtrEmpty-16            0.00B          0.00B           ~     (all equal)
EqualWithLargeEmpty-16                   88.0B ± 0%      0.0B       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedEqual-16           3.52kB ± 0%    0.00kB       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedDifferent-16       2.58kB ± 0%    0.00kB       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedIdenticalPtr-16     0.00B          0.00B           ~     (all equal)

name                                  old allocs/op  new allocs/op  delta
EqualWithSmallEmpty-16                    5.00 ± 0%      0.00       -100.00%  (p=0.008 n=5+5)
EqualWithIdenticalPtrEmpty-16             0.00           0.00           ~     (all equal)
EqualWithLargeEmpty-16                    5.00 ± 0%      0.00       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedEqual-16              200 ± 0%         0       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedDifferent-16          122 ± 0%         0       -100.00%  (p=0.008 n=5+5)
EqualWithDeeplyNestedIdenticalPtr-16      0.00           0.00           ~     (all equal)

Limitations

Use only when speed and efficiency is a concern, otherwise use proto.Equal. In some cases as e.g. some known types Equal will fallback to proto.Equal. Unknown fields and extensions are not supported.