Go에서 맵은 키-값 쌍을 저장할 수 있는 다목적 데이터 구조입니다. 때로는 키를 기반으로 동적 호출을 허용하여 맵에 함수를 저장하는 것이 유용할 수 있습니다.
문제:
여러 함수가 있고 이를 생성하려고 한다고 가정해 보겠습니다. 키가 함수 이름이고 값이 함수 자체인 맵입니다. 그러나 아래와 같이 시도하면 오류가 발생합니다.
func a(param string) {} m := map[string]func{} 'a_func': a, } for key, value := range m { if key == 'a_func' { value(param) } }
해결책:
이 문제는 유형별 맵을 정의하는 구문 때문에 발생합니다. 정확하지 않습니다. 이 문제를 해결하려면 대신 map[string]interface{} 구문을 사용할 수 있습니다. 값에 대해 유형 안전성이 적용되지 않기 때문입니다. 아래의 수정된 예시는 지도에서 함수를 저장하고 호출하는 방법을 보여줍니다.
package main import "fmt" func f(p string) { fmt.Println("function f parameter:", p) } func g(p string, q int) { fmt.Println("function g parameters:", p, q) } func main() { m := map[string]interface{}{ "f": f, "g": g, } for k, v := range m { switch k { case "f": v.(func(string))("astring") case "g": v.(func(string, int))("astring", 42) } } }
이 예시에서 지도 m은 두 개의 함수 값을 인터페이스{}로 저장합니다. 키를 기반으로 함수를 호출할 때 인터페이스 값을 올바른 함수 유형으로 변환하기 위해 유형 어설션이 수행됩니다.
위 내용은 Go에서 지도를 사용하여 함수를 동적으로 저장하고 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!