پرش به مطلب اصلی

Builder

وقتی یه آبجکت خیلی پارامتر داره
یا ساختنش چند مرحله‌ایه
یا نمیخوای constructor با ۲۰ تا پارامتر داشته باشی
از Builder استفاده می‌کنی.

type UserBuilder struct {
name string
email string
age int
address string
}

func NewUserBuilder(name, email string) *UserBuilder {
return &UserBuilder{name: name, email: email}
}

func (b *UserBuilder) Age(age int) *UserBuilder {
b.age = age
return b // chaining
}

func (b *UserBuilder) Address(addr string) *UserBuilder {
b.address = addr
return b
}

func (b *UserBuilder) Build() (*User, error) {
if b.name == "" || b.email == "" {
return nil, fmt.Errorf("name and email are required")
}

return &User{
Name: b.name,
Email: b.email,
Age: b.age,
Address: b.address,
}, nil
}