>백엔드 개발 >Golang >Go 데코레이터가 제네릭 없이 특정 데이터 유형의 함수를 처리할 수 있나요?

Go 데코레이터가 제네릭 없이 특정 데이터 유형의 함수를 처리할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-22 13:53:10628검색

Can Go Decorators Handle Functions with Specific Data Types Without Generics?

Go에서 매개변수화된 함수 이해

Go에서 함수를 매개변수로 전달하면 언어 유형 시스템으로 인해 특정 제약이 발생합니다. 이 기사에서는 특정 데이터 유형을 받아들이는 함수를 데코레이터에 전달하는 데 대한 제한 사항과 잠재적인 솔루션을 살펴봅니다.

Go에서 함수 데코레이션

다음을 수행할 수 있는 데코레이터 함수의 예를 생각해 보세요. 기존 함수를 래핑합니다. 단순화를 위해 이러한 함수는 단일 값을 수신하고 반환합니다. 데코레이터는 funcA와 같은 인터페이스를 수용하고 반환하는 함수와 잘 작동하는 func(interface{}) 인터페이스{} 유형 인수를 수용할 수 있습니다.

유형 변환 딜레마

그러나 , 질문이 생깁니다. 문자열을 받아들이고 문자열을 반환하는 funcB와 같은 함수를 func(interface{}) 인터페이스{}로 변환할 수 있습니까? 유형? 대답은 '아니오'입니다.

설명

Go에서 매개변수 전달에는 함수 서명 일치가 포함됩니다. 문자열을 인수로 기대하는 함수는 명시적인 유형 캐스팅 없이는 인터페이스를 허용하지 않습니다.{} 인터페이스{} 인수는 광범위한 값을 허용하지만 문자열과 같은 특정 유형으로 자동 변환하지는 않습니다.

해결책: 어댑터 함수

이를 연결하려면 공백이 있으면 입력 문자열을 인터페이스로 변환한 다음{} funcB를 호출하는 어댑터 함수를 도입할 수 있습니다. 그런 다음 이 어댑터 함수는 예상 유형을 따르므로 데코레이터 함수로 전달될 수 있습니다.

결론

임의의 함수를 일반 함수로 변환하는 것은 불가능합니다. (인터페이스{}) 인터페이스{} Go에서 제네릭이 없는 유형, 어댑터 기능을 사용하면 해결 방법이 제공됩니다. 이러한 접근 방식을 통해 비인터페이스 기능을 기능을 향상시킬 수 있는 데코레이터에 원활하게 통합할 수 있습니다.

위 내용은 Go 데코레이터가 제네릭 없이 특정 데이터 유형의 함수를 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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