[go] 함수와 메서드에 대한 reflect 활용
reflect
패키지는 Go 언어의 런타임 데이터 타입을 표현하기 위한 기능을 제공합니다. 이 기능을 사용하면 프로그램이 실행 중에 타입 정보를 조사하고, 변수를 동적으로 조작할 수 있습니다. 이를 통해 함수와 메서드를 조사하고 호출할 수 있습니다.
함수와 메서드의 reflect 활용
reflect
패키지를 사용하여 함수와 메서드를 조사하고 호출하는 예제 코드를 살펴보겠습니다.
package main
import (
"fmt"
"reflect"
)
type MyType struct {
Name string
}
func (mt MyType) SayHello() {
fmt.Println("Hello, " + mt.Name)
}
func main() {
mt := MyType{Name: "Alice"}
// MyType의 메서드를 호출하는 예제
value := reflect.ValueOf(mt)
methodValue := value.MethodByName("SayHello")
methodValue.Call([]reflect.Value{})
}
위의 예제 코드에서는 MyType
에 정의된 SayHello
메서드를 reflection을 사용하여 호출하는 방법을 보여줍니다. 이를 통해 실행 중에 동적으로 메서드를 호출할 수 있습니다.
이제 MyType
구조체에 정의된 함수를 호출하는 예제 코드를 살펴보겠습니다.
package main
import (
"fmt"
"reflect"
)
func SayHello(name string) {
fmt.Println("Hello, " + name)
}
func main() {
// 함수를 호출하는 예제
funcValue := reflect.ValueOf(SayHello)
funcValue.Call([]reflect.Value{reflect.ValueOf("Bob")})
}
위의 예제 코드에서는 SayHello
함수를 reflection을 사용하여 호출하는 방법을 보여줍니다. 이를 통해 실행 중에 동적으로 함수를 호출할 수 있습니다.
결론
reflect
패키지를 사용하면 Go 언어의 함수와 메서드를 실행 중에 동적으로 조사하고 호출할 수 있습니다. 이를 통해 다양한 유연한 프로그래밍이 가능해지며, 일부 경우에는 reflection을 사용하여 성능 문제가 발생할 수 있으니 주의가 필요합니다.
더 많은 정보는 공식 Go 문서에서 확인할 수 있습니다.