type 구조체명 struct{}

// House 구조체를 정의
type House struct {
	Address string
	Size    int
	Price   float64
	Type    string
}

func main() {
	var house House // House 구조체 변수 선언
	house.Address = "서울시 강남구"
	house.Size = 28
	house.Price = 9.8
	house.Type = "아파트"

	fmt.Println("주소: ", house.Address)
	fmt.Printf("크기: %d평\\n", house.Size)
	fmt.Printf("가격: %.2f억 원\\n", house.Price) // 소수점 아래 2자리까지 출력
	fmt.Println("타입: ", house.Type)
}

포인터는 왜 쓰나?

type Data struct { // Data 타입 구조체
	value int
	data  [200]int
}

func ChangeData(arg *Data) { // 매개변수로 Data 포인터 받음
	arg.value = 999 // arg 데이터 변경
	arg.data[100] = 999
}

func main() {
	var data Data

	ChangeData(&data) // 인수로 data 주소 넘김
	fmt.Printf("value = %d\\n", data.value)
	fmt.Printf("data[100] = %d\\n", data.data[100])
}
---
value = 999
data[100] = 999

Data 구조체를 생성해 포인터 변수 초기화하기

구조체 변수를 별도로 생성하지 않고 포인터 변수에 구조체 생성해 주소를 초깃값으로 대입 가능

// 기존 방식
var data Data
var p *Data = &data // data 변수 주소를 반환

// 구조체를 생성해 초기화하는 방식
// *Data 타입 구조체 변수 p 선언
var p *Data = &Data{} // Data 구조체를 만들어 주소 반환

인스턴스