Documentation ¶
Overview ¶
The stringer plugin generates a String method for each message.
It is enabled by the following extensions:
- stringer
- stringer_all
The stringer plugin also generates a test given it is enabled using one of the following extensions:
- testgen
- testgen_all
Let us look at:
github.com/gogo/protobuf/test/example/example.proto
Btw all the output can be seen at:
github.com/gogo/protobuf/test/example/*
The following message:
option (gogoproto.goproto_stringer_all) = false; option (gogoproto.stringer_all) = true; message A { optional string Description = 1 [(gogoproto.nullable) = false]; optional int64 Number = 2 [(gogoproto.nullable) = false]; optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false]; }
given to the stringer stringer, will generate the following code:
func (this *A) String() string { if this == nil { return "nil" } s := strings.Join([]string{`&A{`, `Description:` + fmt.Sprintf("%v", this.Description) + `,`, `Number:` + fmt.Sprintf("%v", this.Number) + `,`, `Id:` + fmt.Sprintf("%v", this.Id) + `,`, `XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`, `}`, }, "") return s }
and the following test code:
func TestAStringer(t *testing4.T) { popr := math_rand4.New(math_rand4.NewSource(time4.Now().UnixNano())) p := NewPopulatedA(popr, false) s1 := p.String() s2 := fmt1.Sprintf("%v", p) if s1 != s2 { t.Fatalf("String want %v got %v", s1, s2) } }
Typically fmt.Printf("%v") will stop to print when it reaches a pointer and not print their values, while the generated String method will always print all values, recursively.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewStringer ¶
func NewStringer() *stringer
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.