>백엔드 개발 >Golang >Go의 `장식자()` 함수는 제네릭 없이 특정 반환 유형이 있는 함수를 처리할 수 있나요?

Go의 `장식자()` 함수는 제네릭 없이 특정 반환 유형이 있는 함수를 처리할 수 있나요?

DDD
DDD원래의
2024-12-26 19:47:31595검색

Can Go's `decorator()` function handle functions with specific return types without generics?

Go에서 매개변수에 임의 함수 전달

Go에서 함수를 매개변수로 전달하면 유연성이 향상되고 코드 재사용이 가능해집니다. 그러나 서로 다른 시그니처를 가진 함수를 매개변수로 전달하려고 시도하는 데는 제한이 있습니다.

기존 함수를 래핑할 수 있는 decorator() 함수를 생성하려는 시나리오를 생각해 보세요. 단일 매개변수와 반환 값(예: funcA)이 있는 함수의 경우 func(interface{}) 인터페이스{}를 매개변수 유형으로 사용하면 간단합니다.

질문: 함수를 사용할 수 있나요? 특정 유형(이 경우 문자열)을 허용하고 반환하는 funcB와 같이 다음과의 호환성을 위해 func(interface{}) 인터페이스{} 유형으로 변환됩니다. decorator()?

답변: 안타깝게도 Go에서는 제네릭을 사용하지 않고는 불가능합니다. 그 이유는 함수 간 매개변수 전달 메커니즘의 근본적인 차이점에 있습니다.

예를 들어 구조체를 인수로 받아들이는 함수는 각 멤버를 개별적으로 받습니다. 반대로 해당 구조체가 포함된 인터페이스를 허용하는 함수는{} 구조체 유형에 대한 설명자와 구조체에 대한 포인터라는 두 가지 값을 수신합니다.

따라서 원하는 동작을 달성하려면 어댑터 함수가 필요합니다. 원래 함수의 서명과 예상되는 func(interface{}) 인터페이스{} 유형 사이의 격차를 해소합니다.

위 내용은 Go의 `장식자()` 함수는 제네릭 없이 특정 반환 유형이 있는 함수를 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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