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)
}
변수 대입이나 함수 인수 전달은 값을 복사해서 메모리 사용과 복사할 때 성능 문제 있음
다른 공간으로 복사하므로 변경 사항 반영 X
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 = 0
data[100] = 0
ChangeData()
영역의 arg 값 변경했으나 main()의 Data 구조체는 값이 반영 Xtype 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
구조체 변수를 별도로 생성하지 않고 포인터 변수에 구조체 생성해 주소를 초깃값으로 대입 가능
// 기존 방식
var data Data
var p *Data = &data // data 변수 주소를 반환
// 구조체를 생성해 초기화하는 방식
// *Data 타입 구조체 변수 p 선언
var p *Data = &Data{} // Data 구조체를 만들어 주소 반환