[go] reflect 패키지의 메소드 정보 추출

reflect 패키지는 Go 언어의 런타임 객체를 조작할 수 있는 메커니즘을 제공합니다. 이 패키지를 사용하면 구조체나 인터페이스와 관련된 정보를 동적으로 분석할 수 있습니다. 여기서는 reflect 패키지를 사용하여 구조체나 인터페이스의 메소드 정보를 추출하는 방법에 대해 살펴보겠습니다.

reflect 패키지 import

먼저, reflect 패키지를 import하여 사용합니다.

import "reflect"

구조체의 메소드 정보 추출

reflect 패키지를 사용하여 구조체의 메소드 정보를 추출하려면 reflect.Type과 reflect.Value 타입을 사용합니다.

type MyStruct struct {
    Field1 int
    Field2 string
}

func (m MyStruct) Method1() {
    // 메소드 내용
}

func main() {
    myValue := MyStruct{}
    myType := reflect.TypeOf(myValue)

    for i := 0; i < myType.NumMethod(); i++ {
        method := myType.Method(i)
        methodName := method.Name
        methodType := method.Type
        // 메소드 이름과 타입 출력
        fmt.Println(methodName, methodType)
    }
}

위의 예제에서는 reflect.TypeOf 함수를 사용하여 구조체의 유형을 가져와서 NumMethod 메소드를 호출하여 메소드의 수를 가져옵니다. 그런 다음 Method 메소드를 사용하여 각 메소드의 이름과 타입을 가져옵니다.

인터페이스의 메소드 정보 추출

reflect 패키지를 사용하여 인터페이스의 메소드 정보를 추출하려면 reflect.Type과 reflect.Value 타입을 사용합니다.

type MyInterface interface {
    Method1()
    Method2()
}

func main() {
    var myValue MyInterface
    myType := reflect.TypeOf(myValue)

    for i := 0; i < myType.NumMethod(); i++ {
        method := myType.Method(i)
        methodName := method.Name
        methodType := method.Type
        // 메소드 이름과 타입 출력
        fmt.Println(methodName, methodType)
    }
}

인터페이스의 경우에도 reflect.TypeOf 함수를 사용하여 유형을 가져와서 NumMethod 메소드를 호출하여 메소드의 수를 가져옵니다. 그런 다음 Method 메소드를 사용하여 각 메소드의 이름과 타입을 가져옵니다.

이와 같이 reflect 패키지를 사용하여 구조체나 인터페이스의 메소드 정보를 동적으로 추출할 수 있습니다.

참고 자료

이상으로 reflect 패키지를 사용한 메소드 정보 추출에 대해 알아보았습니다.