Dalam praktek programming sehari-hari, umumnya, cukup digunakan satu builder. Namun ada kalanya kita ingin memisahkan menjadi beberapa builder.
Berikut contoh penggunaan dua builder dengan skenario data personal yang memiliki informasi alamat tinggal dan pekerjaan.
package main import "fmt" type Person struct { //alamat StreetAddress, Postcode, City string //pekerjaan CompanyName, Position string AnnualIncome int } //starting point untuk membuat object person type PersonBuilder struct { person *Person // needs to be inited } //fungsi untuk melakukan inisialisasi func NewPersonBuilder() *PersonBuilder { return &PersonBuilder{&Person{}} } func (it *PersonBuilder) Build() *Person { return it.person } //fungsi utilitas untuk menambahkan build pekerjaan func (it *PersonBuilder) Works() *PersonJobBuilder { return &PersonJobBuilder{*it} } //fungsi utilitas untuk menambahkan build alamat func (it *PersonBuilder) Lives() *PersonAddressBuilder { return &PersonAddressBuilder{*it} } //builder untuk tempat tinggal type PersonAddressBuilder struct { PersonBuilder } //fungsi untuk menambahkan alamat func (it *PersonAddressBuilder) At( streetAddress string) *PersonAddressBuilder { it.person.StreetAddress = streetAddress return it } //fungsi untuk menambahkan kota func (it *PersonAddressBuilder) In( city string) *PersonAddressBuilder { it.person.City = city return it } //fungsi untuk menambahkan postcode func (it *PersonAddressBuilder) WithPostcode( postcode string) *PersonAddressBuilder { it.person.Postcode = postcode return it } //builder untuk pekerjaan type PersonJobBuilder struct { PersonBuilder } //fungsi untuk menambahkan nama perusahaan func (pjb *PersonJobBuilder) At( companyName string) *PersonJobBuilder { pjb.person.CompanyName = companyName return pjb } //fungsi untuk menambahkan jabatan func (pjb *PersonJobBuilder) AsA( position string) *PersonJobBuilder { pjb.person.Position = position return pjb } //fungsi untuk menambahkan gaji func (pjb *PersonJobBuilder) Earning( annualIncome int) *PersonJobBuilder { pjb.person.AnnualIncome = annualIncome return pjb } func main() { pb := NewPersonBuilder() pb. Lives(). At("Popies Lane"). In("Bali"). WithPostcode("43921"). Works(). At("Kafe PiKoPi"). AsA("Barista"). Earning(1000000) person := pb.Build() fmt.Println(*person) }