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 중국어 웹사이트의 기타 관련 기사를 참조하세요!