Define Your Domain Types as Protocol Buffers
Distributed Services with Go — by Travis Jeffery (19 / 84)
👈 Install the Protocol Buffer Compiler | TOC | Compile Protocol Buffers 👉
In the previous chapter, we defined our Record type in Go as this struct:
type Record struct {
Value []byte `json:"value"`
Offset uint64 `json:"offset"`
}
To turn that into a protobuf message we need to convert the Go code into protobuf syntax.
The convention for Go projects is to put your protobuf in an api directory. So run mkdir -p api/v1 to create your directories, then create a file called log.proto in the v1 directory and put this code in it:
StructureDataWithProtobuf/api/v1/log.proto
syntax = "proto3";
package log.v1;
option go_package = "github.com/travisjeffery/api/log_v1"; message Record {
bytes value = 1;
uint64 offset = 2;
}
In this protobuf code, we specify that we’re using proto3 syntax — the latest version of protobuf syntax. Then we specify a package name for two reasons: because this protobuf package name is used as the package name in the generated Go code and because it prevents name clashes between protocol message types that have the same name.