Go의 매핑 함수
Go에서 맵은 키를 해당 값과 연결하는 강력한 방법을 제공합니다. 함수를 매핑하려면 키는 일반적으로 함수의 이름이나 식별자를 나타내는 문자열이고 값은 함수 참조입니다.
예:
다음을 고려하세요. Go 프로그램:
func a(param string) { fmt.Println("parameter:", param) } m := map[string]func(string) { "a": a, } for key, value := range m { if key == "a" { value("hello") } }
이 예에서 맵 m은 문자열 키 "a"와 함수 참조 간의 매핑을 저장하는 데 사용됩니다. 가. 루프는 맵을 반복하고 "a" 키와 연결된 함수를 실행하여 "hello" 문자열을 인수로 전달합니다.
다양한 함수 서명 처리:
그러나 초기 시도에서 맵에 다른 시그니처를 사용하여 함수를 저장하려고 할 때 문제가 발생했습니다. 이는 맵의 값 유형이 func()로 선언되어 있기 때문입니다. 다양한 서명이 있는 함수를 처리하기 위해 인터페이스를 값 유형으로 사용할 수 있습니다(예: 다음 수정된 예시에 사용된 인터페이스{}).
func f(p string) {} func g(p string, q int) {} m := map[string]interface{}{ "f": f, "g": g, } for k, v := range m { switch k { case "f": v.(func(string))("astring") // Explicit cast to type func(string) case "g": v.(func(string, int))("astring", 42) // Explicit cast to type func(string, int) } }
인터페이스{} 유형을 사용하면 다음을 허용합니다. 다양한 시그니처를 가진 함수를 포함하여 모든 유형의 값을 저장하기 위해 매핑됩니다. 그런 다음 루프 내에서 명시적인 유형 캐스팅을 사용하여 해당 매개변수로 함수를 실행합니다.
위 내용은 Go에서 다른 서명을 사용하여 함수를 어떻게 매핑할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!