[go] 구조체(struct)의 필드 순서와 저장 공간 배치 방식

Go 언어에서 구조체(struct)는 관련된 필드들을 묶어 하나의 자료형으로 정의하는데 사용됩니다. 한 구조체 내에 선언된 필드들은 순서대로 메모리에 배치되며, 이 순서는 구조체의 저장 공간 배치 방식에 영향을 줍니다.

구조체의 필드 순서는 메모리의 연속된 위치에 필드가 배치되는 순서를 말합니다. 즉, 첫 번째 필드는 구조체의 시작 주소에 배치되며, 그 다음 필드는 이전 필드의 메모리 크기만큼의 위치에 배치됩니다.

아래 예제는 구조체의 필드 순서와 저장 공간 배치 방식에 대한 간단한 예시입니다.

package main

import (
	"fmt"
	"unsafe"
)

type Person struct {
	Name   string
	Age    int
	Height float64
}

func main() {
	p := Person{
		Name:   "John",
		Age:    30,
		Height: 175.5,
	}

	fmt.Println("Size of Person struct:", unsafe.Sizeof(p))
	fmt.Println("Address of Name:", unsafe.Offsetof(p.Name))
	fmt.Println("Address of Age:", unsafe.Offsetof(p.Age))
	fmt.Println("Address of Height:", unsafe.Offsetof(p.Height))
}

위 예제에서는 Person 구조체를 정의하고, 필드로 Name(string), Age(int), Height(float64)가 선언되어 있습니다. main 함수에서는 Person 구조체 변수 p를 생성하고, unsafe 패키지의 Sizeof와 Offsetof 함수를 사용하여 구조체의 크기와 필드의 메모리 주소를 출력합니다.

실행 결과를 보면, 필드 순서대로 메모리에 배치되고 각 필드의 메모리 주소가 출력되는 것을 확인할 수 있습니다. 이런 순서와 배치 방식은 구조체 필드에 직접 접근하여 값을 할당하거나 가져올 때 유용하게 사용될 수 있습니다.

이와 같이 Go 언어의 구조체는 필드 순서와 저장 공간 배치의 개념을 가지고 있으며, 이를 이해하고 활용한다면 구조체를 더욱 효과적으로 사용할 수 있습니다.

더 자세한 정보는 Go 언어의 공식 문서를 참조하세요: