Marshal Comparison
Compare protobuf and JSON serialization size for the same data.
package main
import (
"encoding/json"
"fmt"
"log"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/proto"
"shortener/pb"
)
func main() {
link := &pb.Link{
Id: 1,
Url: "https://example.com",
ShortCode: "abc123",
Clicks: 42,
}
pbData, err := proto.Marshal(link)
if err != nil {
log.Fatal(err)
}
jsonData, err := json.Marshal(link)
if err != nil {
log.Fatal(err)
}
pjData, err := protojson.Marshal(link)
if err != nil {
log.Fatal(err)
}
fmt.Printf("protobuf: %d bytes\n", len(pbData))
fmt.Printf("json: %d bytes\n", len(jsonData))
fmt.Printf("protojson: %d bytes\n", len(pjData))
fmt.Printf("protojson: %s\n", string(pjData))
}