Builder#
Writing test fixtures by hand means repeating the same struct literal everywhere, and editing every call site whenever a field is added. The Builder generator gives you a fluent With...() API instead. Enabled by default; disable with -builder=false.
gcraft generate -type User -src ./user.gotype User struct {
Name string
Email string
Age int
}Generates:
type UserBuilder struct {
v User
}
func NewUserBuilder() *UserBuilder {
return &UserBuilder{}
}
func (b *UserBuilder) WithName(v string) *UserBuilder {
b.v.Name = v
return b
}
func (b *UserBuilder) WithEmail(v string) *UserBuilder {
b.v.Email = v
return b
}
func (b *UserBuilder) WithAge(v int) *UserBuilder {
b.v.Age = v
return b
}
func (b *UserBuilder) Build() User {
return b.v
}Usage:
u := NewUserBuilder().
WithName("Ada").
WithEmail("ada@example.com").
WithAge(30).
Build()Build() returns User by value, not a pointer.