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

PHPz
풀어 주다: 2024-02-06 10:33:03
앞으로
491명이 탐색했습니다.

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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!