Go에서 매개변수화된 함수 이해
Go에서 함수를 매개변수로 전달하면 언어 유형 시스템으로 인해 특정 제약이 발생합니다. 이 기사에서는 특정 데이터 유형을 받아들이는 함수를 데코레이터에 전달하는 데 대한 제한 사항과 잠재적인 솔루션을 살펴봅니다.
Go에서 함수 데코레이션
다음을 수행할 수 있는 데코레이터 함수의 예를 생각해 보세요. 기존 함수를 래핑합니다. 단순화를 위해 이러한 함수는 단일 값을 수신하고 반환합니다. 데코레이터는 funcA와 같은 인터페이스를 수용하고 반환하는 함수와 잘 작동하는 func(interface{}) 인터페이스{} 유형 인수를 수용할 수 있습니다.
유형 변환 딜레마
그러나 , 질문이 생깁니다. 문자열을 받아들이고 문자열을 반환하는 funcB와 같은 함수를 func(interface{}) 인터페이스{}로 변환할 수 있습니까? 유형? 대답은 '아니오'입니다.
설명
Go에서 매개변수 전달에는 함수 서명 일치가 포함됩니다. 문자열을 인수로 기대하는 함수는 명시적인 유형 캐스팅 없이는 인터페이스를 허용하지 않습니다.{} 인터페이스{} 인수는 광범위한 값을 허용하지만 문자열과 같은 특정 유형으로 자동 변환하지는 않습니다.
해결책: 어댑터 함수
이를 연결하려면 공백이 있으면 입력 문자열을 인터페이스로 변환한 다음{} funcB를 호출하는 어댑터 함수를 도입할 수 있습니다. 그런 다음 이 어댑터 함수는 예상 유형을 따르므로 데코레이터 함수로 전달될 수 있습니다.
결론
임의의 함수를 일반 함수로 변환하는 것은 불가능합니다. (인터페이스{}) 인터페이스{} Go에서 제네릭이 없는 유형, 어댑터 기능을 사용하면 해결 방법이 제공됩니다. 이러한 접근 방식을 통해 비인터페이스 기능을 기능을 향상시킬 수 있는 데코레이터에 원활하게 통합할 수 있습니다.
위 내용은 Go 데코레이터가 제네릭 없이 특정 데이터 유형의 함수를 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!