[go] reflect 패키지를 활용한 구조체 내 필드 값 변경

Go 언어의 reflect 패키지는 메타 프로그래밍을 가능하게 해주는 가장 강력한 툴 중 하나입니다. 이를 통해 런타임에서 타입 정보를 확인하고 구조체의 필드 값을 변경하는 등의 작업을 할 수 있습니다.

이번 포스트에서는 reflect 패키지를 활용하여 구조체 내의 필드 값을 변경하는 방법에 대해 알아보겠습니다. 꼭 필요한 경우가 아니라면 reflect를 사용하는 것은 권장되지 않지만, 경우에 따라서 유용하게 활용될 수 있습니다.

내용

  1. reflect 패키지 소개
  2. 구조체 필드 값 변경하기
  3. 예제 코드
  4. 참고 자료

reflect 패키지 소개

reflect 패키지는 Go의 런타임 리플렉션을 지원하는 패키지로, 프로그램이 실행될 때 타입의 정보를 검사하고 변경할 수 있습니다. 이 패키지를 사용하면 코드의 유연성을 높일 수 있지만, 사용하기에는 복잡하고 성능에도 영향을 줄 수 있습니다.

구조체 필드 값 변경하기

reflect 패키지를 활용하여 구조체 내의 필드 값을 변경하려면 다음과 같은 단계를 거칩니다.

  1. reflect.ValueOf를 통해 구조체 인스턴스를 가져옵니다.
  2. 해당 인스턴스의 필드를 reflect.Value.FieldByName을 사용하여 가져옵니다.
  3. 필드의 값을 변경합니다.

이러한 방법을 통해 런타임에서 구조체의 필드 값을 변경할 수 있습니다.

예제 코드

다음은 reflect 패키지를 사용하여 구조체의 필드 값을 변경하는 간단한 예제 코드입니다.

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	p := Person{Name: "Alice", Age: 30}

	v := reflect.ValueOf(&p).Elem()
	field := v.FieldByName("Age")

	if field.IsValid() && field.CanSet() {
		field.SetInt(31)
	}

	fmt.Println(p)
}

이 예제 코드에서는 reflect 패키지를 사용하여 Person 구조체의 Age 필드 값을 변경하고 있습니다.

참고 자료

  1. Go 언어 공식 문서 - reflect 패키지

이번 포스트에서는 reflect 패키지를 활용하여 구조체 내의 필드 값을 변경하는 방법에 대해 살펴보았습니다. reflect 패키지를 사용하는 것은 조심해야 하지만, 특정한 상황에 필요한 경우 유용하게 활용될 수 있습니다.