[go] 구조체(struct)와 reflect 패키지

Go 언어는 강력한 타입 시스템과 효율적인 메모리 관리로 유명합니다. 이 언어의 핵심 기능 중 하나는 구조체(struct)입니다. 구조체는 여러 필드를 하나로 묶어서 복합 데이터 형식을 만들 수 있게 해줍니다. 또한, reflect 패키지를 사용하여 동적으로 타입 정보를 조사하고 조작할 수 있습니다.

구조체(struct)란?

구조체는 Go 언어에서 사용자 정의 데이터 타입을 만들 수 있는 강력한 기능입니다. 간단한 예시로, 사람의 정보를 저장하는 구조체를 만들어보겠습니다.

type Person struct {
    Name   string
    Age    int
    Email  string
}

위의 코드에서 Person 구조체는 Name, Age, Email 세 가지 필드를 갖고 있습니다. 이제 이를 활용하여 사람의 정보를 표현하는 인스턴스를 생성할 수 있습니다.

person := Person{Name: "John Doe", Age: 30, Email: "john@example.com"}

Reflect 패키지 활용하기

reflect 패키지를 사용하면 구조체나 인터페이스의 값, 타입 및 구조를 동적으로 조사할 수 있습니다. 예를 들어, 구조체의 필드 정보를 탐색하거나 동적으로 값을 설정하는 등의 작업을 할 수 있습니다.

package main

import (
    "fmt"
    "reflect"
)

type Person struct {
    Name   string
    Age    int
    Email  string
}

func main() {
    person := Person{Name: "John Doe", Age: 30, Email: "john@example.com"}

    t := reflect.TypeOf(person)

    for i := 0; i < t.NumField(); i++ {
        field := t.Field(i)
        fmt.Printf("%s: %v\n", field.Name, reflect.ValueOf(person).Field(i))
    }
}

위의 예제는 reflect 패키지를 사용하여 구조체 Person의 필드 정보를 출력하는 간단한 코드입니다.

이처럼 Go 언어의 구조체와 reflect 패키지를 활용하면 강력한 동적 프로그래밍이 가능합니다. 이러한 기능을 통해 유연하고 다양한 형태의 데이터를 처리할 수 있습니다.

구조체와 reflect 패키지의 활용에 대한 더 많은 내용은 공식 Go 언어 문서를 참고하시기 바랍니다.