생성 함수
구조체를 생성할 때 초깃값을 지정하지 않으면 제로값으로 초기화된다. 하지만 종종 규칙에 따라 초깃값을 지정해야 할 때가 있다. Go의 구조체는 생성자를 지원하지 않지만, 구조체를 생성하기 위한 함수를 만들어 생성자와 같은 효과를 줄 수는 있다.
type Item struct { name string price float64 quantity int } func NewItem(name string, price float64, quantity int) *Item { if price <= 0 || quantity <= 0 || len(name) == 0 { return nil } return &Item{name, price, quantity} }
Item 타입은 public으로 정의했지만, 내부 필드인 name, price, quantity는 외부에서 값을 임의로 수정하지 못하도록 private으로 정의했다. 그리고 항상 유효한 *Item이 생성되도록 NewItem() 함수를 제공했다. 다음과 같이 NewItem() 함수를 사용하면 항상 유효한 값으로 *Item이 생성됨을 보장한다.
t := NewItem(“Men’s Slim-Fit Shirt”, 25000, 3)