https://github.com/kfelter/protobuf-example
simple example demonstrating how to use protobuf in golang
https://github.com/kfelter/protobuf-example
example golang proto3 protobuf
Last synced: 9 months ago
JSON representation
simple example demonstrating how to use protobuf in golang
- Host: GitHub
- URL: https://github.com/kfelter/protobuf-example
- Owner: kfelter
- Created: 2021-05-01T03:07:29.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-08-26T14:37:18.000Z (over 2 years ago)
- Last Synced: 2025-04-06T04:08:18.419Z (10 months ago)
- Topics: example, golang, proto3, protobuf
- Language: Go
- Homepage:
- Size: 213 KB
- Stars: 9
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# protobuf example
A simple example of using protobuf in golang
# Summary
If you are not using gRPC for server to server communications in your golang app, you are missing out on one of the best optimizations that you can make for the performance of the code and the development team.
1. It makes understanding the data model easier by strictly enforcing the proto 3 syntax. Json is easy to get started with and make a prototype, but protobuf will be more strict about syntax and standardize your communication between services.
2. Updating the schema for a gRPC request is simple, update the protobuf file and run code generation. Then it becomes like using any other package written in go to call your external service. No more boilerplate client code.
3. Protobuf marshaling is faster, uses less memory and produces a smaller payload than Json or xml Marshalling. This directly impacts infrastructure costs and will save money.
The time and cost savings you will see from using gRPC in your golang app is worth the time investment it will take to learn and implement it.
# creating data structures using protobuf
write the protobuf file
```proto
syntax = "proto3";
package publish;
option go_package = "/publish";
message Event {
bytes content = 1;
repeated string tags = 2;
}
message EventList {
repeated Event events = 1;
}
```
This creates two structs, one is an event struct that contains `content` that is a byte array and `tags` that is a string array of strings
There is also a struct for an array of events.
Now run the protoc command to generate the go code we will use in `main.go`
```
protoc --proto_path=. --go_out=. publish.proto
```
This creates the directory `publish` that contains the package `publish` with the go code that we can import to our `main.go` file.
Now we can import it using `github.com/kfelter/protobuf-example/publish`
There are other advantages to using protobuf that can be found in the protobuf documentation.
References:
install protoc https://grpc.io/docs/protoc-installation/
proto3 language guide https://developers.google.com/protocol-buffers/docs/proto3#simple
protobuf golang tutorial https://developers.google.com/protocol-buffers/docs/gotutorial