Builder Design Pattern Using Golang
What is Builder Design Pattern ?
Builder Design Pattern Using Golang

What is Builder Design Pattern ?
- It is a creational design pattern that allows you to create step by step & lets you choose only the parts you need.
Why do we need it ?
- Imagine creating a game character:
warrior := Character{
Name:"Avenger",
Health:100,
Attack:20,
Defence:15,
Weapon:"Sword",
Armor:"Steel Armor",
Skill:"Fire Strike",
}
- Now imagine the character has 20 fields, the constructor looks ugly.
Builder Solution
- Build the object step by step
warrior := NewCharacterBuilder()
.SetName("Avenger")
.SetHealth(100)
.SetAttack(20)
.SetWeapon("Sword")
.Build()
- Now this is more readable
Code:
type Character struct {
Name string
Attack int
Health int
Defence int
Weapon string
Armor string
Skill string
}
type CharacterBuilder struct {
char Character
}
**Characteris a struct (like a blueprint) that defines what a game character has (name, attack, health, weapon, etc.).**CharacterBuilderis another struct used to help build or create a Character step by step.- It contains a
charfield, which stores the character being built inside the builder.
func NewCharacter()*CharacterBuilder{
return &CharacterBuilder{}
}
NewCharacteris a constructor function that creates a newCharacterBuilder.- It returns a pointer to an empty builder object, ready to be used for building a character.
func(c *CharacterBuilder)SetName(val string)*CharacterBuilder{
c.char.Name = val
return c
}
func(c *CharacterBuilder)SetAttack(val int)*CharacterBuilder{
c.char.Attack = val
return c
}
func(c *CharacterBuilder)SetDefence(val int)*CharacterBuilder{
c.char.Defence = val
return c
}
func(c *CharacterBuilder)SetHealth(val int)*CharacterBuilder{
c.char.Health = val
return c
}
func(c *CharacterBuilder)SetWeapon(val string)*CharacterBuilder{
c.char.Weapon = val
return c
}
func(c *CharacterBuilder)SetArmor(val string)*CharacterBuilder{
c.char.Armor = val
return c
}
func(c *CharacterBuilder)SetSkill(val string)*CharacterBuilder{
c.char.Skill = val
return c
}
- These are builder methods that set different fields (Name, Attack, Health, etc.) of the
Character. - Each function updates one property inside the
charobject ofCharacterBuilder. - After setting the value, they return the builder (
c) itself so you can chain multiple calls together. - This pattern makes it easy to build a character step by step in a clean way.
func(c *CharacterBuilder)Build()Character {
return c.char
}
- This
Build()function returns the completed character from the builder. - It is usually called at the end to get the final object after setting all values.
func main(){
warrior := NewCharacter().SetName("Avenger").SetAttack(80).SetHealth(100).SetWeapon("Magic").Build()
fmt.Println(warrior)
}
- In
main, a character is created step-by-step using method chaining (setting name, attack, health, and weapon). - Finally,
Build()returns the complete character, andfmt.Printlnprints it.
Full Code :
package main
import (
"fmt"
)
type Character struct {
Name string
Attack int
Health int
Defence int
Weapon string
Armor string
Skill string
}
type CharacterBuilder struct {
char Character
}
func NewCharacter()*CharacterBuilder{
return &CharacterBuilder{}
}
func(c *CharacterBuilder)SetName(val string)*CharacterBuilder{
c.char.Name = val
return c
}
func(c *CharacterBuilder)SetAttack(val int)*CharacterBuilder{
c.char.Attack = val
return c
}
func(c *CharacterBuilder)SetDefence(val int)*CharacterBuilder{
c.char.Defence = val
return c
}
func(c *CharacterBuilder)SetHealth(val int)*CharacterBuilder{
c.char.Health = val
return c
}
func(c *CharacterBuilder)SetWeapon(val string)*CharacterBuilder{
c.char.Weapon = val
return c
}
func(c *CharacterBuilder)SetArmor(val string)*CharacterBuilder{
c.char.Armor = val
return c
}
func(c *CharacterBuilder)SetSkill(val string)*CharacterBuilder{
c.char.Skill = val
return c
}
func(c *CharacterBuilder)Build()Character {
return c.char
}
func main(){
warrior := NewCharacter().SetName("Avenger").SetAttack(80).SetHealth(100).SetWeapon("Magic").Build()
fmt.Println(warrior)
}
Output:
{Avenger 80 100 0 Magic } 메타데이터
- post_id
- cc609c3f23b7
- slug
- builder-design-pattern-using-golang-cc609c3f23b7
- url
- https://medium.com/@iamchiranjeeb/builder-design-pattern-using-golang-cc609c3f23b7
- canonical_url
- https://medium.com/@iamchiranjeeb/builder-design-pattern-using-golang-cc609c3f23b7
- author_url
- https://medium.com/@iamchiranjeeb
- status
- ok
- fetched_at
- 2026-06-23 17:05:31