>  기사  >  백엔드 개발  >  Golang 제네릭 - 함수 포인터를 전달할 때 동일한 유형 대신 유형을 사용할 수 없습니다.

Golang 제네릭 - 함수 포인터를 전달할 때 동일한 유형 대신 유형을 사용할 수 없습니다.

PHPz
PHPz앞으로
2024-02-06 10:33:03521검색

Golang 泛型 - 在传递函数指针时不能使用类型代替相同类型

질문 내용

저는 golang을 처음 접했고 다음 구조로 작업 중입니다.

으아아아

그 중에서도 T 可以是 intbool

다음 함수를 정의했습니다.

으아아아

bool과 같은 다양한 데이터 유형에 위 함수를 사용하려고 할 때 다음을 사용합니다.

으아아아

다음과 같은 오류 메시지가 나타납니다:

으아아아

"X"를 "X"로 사용할 수 없다는 메시지가 매우 혼란스럽습니다. 내가 여기서 뭘 잘못하고 있는지 알아낼 수 있도록 도와주실 수 있나요?


정답


우선 여기서 더 큰 사용 사례를 측정하기는 어렵지만 런타임 유형 검사(예: f.defaultValue.(T))를 수행하고 있으므로 제네릭이 여기에 가장 적합하지 않을 수 있습니다.

두 번째로, go 1.20를 사용하고 있는 것 같은데, 이로 인해 혼란스러운 오류가 발생합니다.

https://www.php.cn/link/63e8e3643e7f7198858eef325b0600f9

으아아아

최신 Playground 버전(go 1.21 이 글을 쓰는 시점)을 사용하면 더 자세한 컴파일 오류가 발생합니다.

https://www.php.cn/link/2d1bcedd27b586d2a9562a0f8e076b41

으아아아

유형 제약 조건에서 파생된 유형 bool 被指定的位置 (./prog.go:13:14)을 나타냅니다.

이 유형 제약 조건 bool이 제네릭이 아닌 함수 서명과 일치하기 때문입니다:

으아아아

정확히 편집 일치한다는 의미는 아닙니다.

이 인위적인 예제 를 사용하여 컴파일 오류를 "해결"할 수 있습니다.

으아아아

하지만 다시 말하지만 제네릭은 특정 사용 사례에 가장 적합한 솔루션이 아닐 수도 있습니다.

위 내용은 Golang 제네릭 - 함수 포인터를 전달할 때 동일한 유형 대신 유형을 사용할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제