populate - ActiveState ActiveGo 1.8

Package populate

import "github.com/gogo/protobuf/plugin/populate"

Overview ▾

The populate plugin generates a NewPopulated function. This function returns a newly populated structure.

It is enabled by the following extensions:

- populate
- populate_all

Let us look at:


Btw all the output can be seen at:


The following message:

  option (gogoproto.populate_all) = true;

  message B {
	optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
	repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];

given to the populate plugin, will generate code the following code:

  func NewPopulatedB(r randyExample, easy bool) *B {
	this := &B{}
	v2 := NewPopulatedA(r, easy)
	this.A = *v2
	if r.Intn(10) != 0 {
		v3 := r.Intn(10)
		this.G = make([]github_com_gogo_protobuf_test_custom.Uint128, v3)
		for i := 0; i < v3; i++ {
			v4 := github_com_gogo_protobuf_test_custom.NewPopulatedUint128(r)
			this.G[i] = *v4
	if !easy && r.Intn(10) != 0 {
		this.XXX_unrecognized = randUnrecognizedExample(r, 3)
	return this

The idea that is useful for testing. Most of the other plugins' generated test code uses it. You will still be able to use the generated test code of other packages if you turn off the popluate plugin and write your own custom NewPopulated function.

If the easy flag is not set the XXX_unrecognized and XXX_extensions fields are also populated. These have caused problems with JSON marshalling and unmarshalling tests.

func NewPlugin

func NewPlugin() *plugin

type VarGen

type VarGen interface {
    Next() string
    Current() string

func NewVarGen

func NewVarGen() VarGen