Awesome Go

proto

CategorySerialization
SubcategorySerialization
Stars614

Parser and writer for Google ProtocolBuffers .proto files

About proto

proto

Go GoDoc codecov

Package in Go for parsing Google Protocol Buffers .proto files version 2 + 3, editions

install

go get github.com/emicklei/proto

usage

package main

import (
	"fmt"
	"os"

	"github.com/emicklei/proto"
)

func main() {
	reader, _ := os.Open("test.proto")
	defer reader.Close()

	parser := proto.NewParser(reader)
	definition, _ := parser.Parse()

	proto.Walk(definition,
		proto.WithService(handleService),
		proto.WithMessage(handleMessage))
}

func handleService(s *proto.Service) {
	fmt.Println(s.Name)
}

func handleMessage(m *proto.Message) {
	lister := new(optionLister)
	for _, each := range m.Elements {
		each.Accept(lister)
	}
	fmt.Println(m.Name)
}

type optionLister struct {
	proto.NoopVisitor
}

func (l optionLister) VisitOption(o *proto.Option) {
	fmt.Println(o.Name)
}

validation

Current parser implementation is not completely validating .proto definitions. In many but not all cases, the parser will report syntax errors when reading unexpected charaters or tokens. Use some linting tools or protoc for full validation.

contributions

See proto-contrib for other contributions on top of this package such as protofmt, proto2xsd and proto2gql. protobuf2map is a small package for inspecting serialized protobuf messages using its .proto definition.

© 2017-2025, ernestmicklei.com. MIT License. Contributions welcome.

Frequently Asked Questions

What is proto?

proto is a Serialization library for the Go programming language. Parser and writer for Google ProtocolBuffers .proto files

How do I install proto?

Install proto with the Go module system using `go get emicklei/proto`. Check the repository for the current installation instructions.

What category does proto belong to?

proto is listed under Serialization, specifically Serialization.

← Back to Serialization