[go] 소스 코드의 구조를 변환하는 reflect 패키지의 활용

Go 언어는 소스 코드를 동적으로 조작하기 위한 강력한 패키지인 reflect를 제공합니다. reflect 패키지는 변수의 타입을 검사하거나, 인터페이스를 동적으로 조작하거나, 구조체의 필드에 접근하는 등 다양한 기능을 제공합니다. 이번 포스트에서는 reflect 패키지를 활용하여 Go 소스 코드의 구조를 변환하는 방법에 대해 알아보겠습니다.

1. reflect 패키지 소개

reflect 패키지는 Go의 리플렉션 기능을 제공합니다. 리플렉션은 프로그램이 자신의 구조를 검사하거나 조작할 수 있는 능력을 의미합니다. reflect 패키지를 사용하면 변수의 타입을 검사하거나, 구조체의 필드에 접근하거나, 메소드를 호출하는 등의 작업을 수행할 수 있습니다.

2. 구조체 변환 예시

아래의 예시 코드는 reflect 패키지를 사용하여 구조체의 필드를 동적으로 변환하는 방법을 보여줍니다.

package main

import (
	"fmt"
	"reflect"
)

type Employee struct {
	Name   string
	Age    int
	Salary float64
}

func main() {
	emp := Employee{Name: "Alice", Age: 30, Salary: 50000.0}

	empValue := reflect.ValueOf(&emp).Elem()
	empType := empValue.Type()

	for i := 0; i < empValue.NumField(); i++ {
		field := empValue.Field(i)
		fieldType := empType.Field(i)

		switch field.Kind() {
		case reflect.String:
			field.SetString("Bob")
		case reflect.Int:
			field.SetInt(35)
		case reflect.Float64:
			field.SetFloat(60000.0)
		}
		fmt.Printf("Changed %s to %v\n", fieldType.Name, field.Interface())
	}

	fmt.Println("Modified Employee:", emp)
}

3. 결과

위의 예시 코드를 실행하면 구조체 Employee의 필드가 동적으로 변환되어 출력됩니다. 즉, reflect 패키지를 사용하여 구조체의 필드를 타입에 따라 동적으로 조작할 수 있음을 확인할 수 있습니다.

이와 같이 reflect 패키지를 활용하면 Go 언어의 리플렉션 기능을 통해 소스 코드의 구조를 동적으로 조작할 수 있습니다.

4. 참고 자료

이번 포스트에서는 reflect 패키지를 활용하여 Go 소스 코드의 구조를 변환하는 방법에 대해 알아보았습니다. reflect 패키지의 활용은 Go 언어에서 유연하고 강력한 소스 코드 조작 기능을 제공합니다.