>백엔드 개발 >Golang >런타임에 해당 이름(문자열)을 사용하여 Go 함수를 어떻게 호출할 수 있나요?

런타임에 해당 이름(문자열)을 사용하여 Go 함수를 어떻게 호출할 수 있나요?

DDD
DDD원래의
2024-12-04 18:45:14243검색

How Can I Call a Go Function Using Its Name (String) at Runtime?

Go의 문자열에서 함수에 대한 포인터

메타 프로그래밍, 즉 런타임에 코드 자체를 조작하는 기능은 프로그래밍에서 강력한 기술입니다. Go에서 발생할 수 있는 한 가지 측면은 문자열로 제공되는 이름을 기반으로 함수에 대한 포인터에 액세스해야 한다는 것입니다.

해결책

달리 동적 언어에서 Go 함수는 일류 값으로 간주됩니다. 즉, 함수를 다른 함수에 인수로 전달할 수 있어 복잡한 메타프로그래밍 기술이 필요하지 않습니다.

이를 입증하려면 다음 코드 조각을 고려하세요.

package main

import "fmt"

func someFunction1(a, b int) int {
    return a + b
}

func someFunction2(a, b int) int {
    return a - b
}

func someOtherFunction(a, b int, f func(int, int) int) int {
    return f(a, b)
}

func main() {
    fmt.Println(someOtherFunction(111, 12, someFunction1))
    fmt.Println(someOtherFunction(111, 12, someFunction2))
}

실행

이 코드가 실행되면 다음이 생성됩니다. 출력:

123
99

이는 이름에 따라 함수를 someOtherFunction에 인수로 전달하는 방법을 보여줍니다.

사용자 정의 함수 선택

If 함수 선택은 런타임에만 알려진 값에 따라 달라집니다. 맵을 사용하여 함수 이름을 해당 함수와 연결할 수 있습니다. 포인터:

m := map[string]func(int, int) int{
    "someFunction1": someFunction1,
    "someFunction2": someFunction2,
}

...

z := someOtherFunction(x, y, m[key])

위 내용은 런타임에 해당 이름(문자열)을 사용하여 Go 함수를 어떻게 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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