>백엔드 개발 >Golang >리플렉션을 사용하여 매개변수 및 반환 유형을 기반으로 Go 함수를 필터링하는 방법은 무엇입니까?

리플렉션을 사용하여 매개변수 및 반환 유형을 기반으로 Go 함수를 필터링하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 00:15:02529검색

How to Filter Go Functions Based on Parameters and Return Types Using Reflection?

Go에서 매개변수 및 반환 유형을 기준으로 함수 필터링

함수 모음이 있고 해당 함수를 선택적으로 선택해야 하는 시나리오를 생각해 보세요. 정수를 반환하거나 정수를 입력 매개 변수로 사용하는 등 특정 기준을 충족합니다. 이 작업은 Golang의 리플렉션을 사용하여 수행할 수 있습니다.

reflect 패키지는 Go의 기본 메타데이터 유형 및 값에 대한 액세스를 제공합니다. Reflect.ValueOf 및 Reflect.Type을 활용하면 함수 유형을 검사하고 해당 매개변수 및 반환 값에 대한 정보를 검색할 수 있습니다.

정수를 반환하는 함수를 선택하려면 목록의 각 함수를 반복하고 다음을 사용합니다. Reflect.ValueOf를 사용하여 해당 값을 얻습니다. 그런 다음 Reflect.Type을 사용하여 함수 유형을 검색하고 NumOut 및 Out을 사용하여 반환 값을 검사합니다. 반환 값의 유형이 "int"인 경우 함수를 "좋음"으로 표시하여 포함합니다.

마찬가지로 정수를 매개변수로 사용하는 함수를 선택하려면 함수의 NumIn 매개변수를 반복하고 Reflect.In을 사용하여 각 입력의 유형을 확인하십시오. 입력 유형 중에 "int"가 있으면 함수를 "good"으로 표시합니다.

다음은 이 접근 방식을 사용하는 방법을 보여주는 예제 프로그램입니다.

<code class="go">package main

import (
    "fmt"
    "reflect"
)

func main() {
    funcs := make([]interface{}, 3, 3)
    funcs[0] = func(a int) int { return a + 1 }
    funcs[1] = func(a string) int { return len(a) }
    funcs[2] = func(a string) string { return ":(" }

    for _, fi := range funcs {
        f := reflect.ValueOf(fi)
        functype := f.Type()
        good := false

        for i := 0; i < functype.NumIn(); i++ {
            if functype.In(i).String() == "int" {
                good = true
                break
            }
        }

        for i := 0; i < functype.NumOut(); i++ {
            if functype.Out(i).String() == "int" {
                good = true
                break
            }
        }

        if good {
            fmt.Println(f)
        }
    }
}
````
</code>

위 내용은 리플렉션을 사용하여 매개변수 및 반환 유형을 기반으로 Go 함수를 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.