> 백엔드 개발 > Golang > 채널과 슬라이스를 허용하는 일반 함수

채널과 슬라이스를 허용하는 일반 함수

PHPz
풀어 주다: 2024-02-06 08:36:10
앞으로
832명이 탐색했습니다.

채널과 슬라이스를 허용하는 일반 함수

질문 내용

비슷한 방식으로 슬라이스와 채널의 값을 검색하는 일반 함수를 golang에 작성하려고 합니다. 예는 다음과 같습니다.

으아아아

하지만 다음과 같은 컴파일 오류가 발생합니다: cannot range over input(类型 t 的变量受 chan int|[]int 约束)(t 没有核心类型).

저는 다음과 같은 일반적인 인터페이스를 만들려고 했습니다:

으아아아

오류가 cannot range over input(t 类型的变量受 rangable 约束)(t 没有核心类型)로 변경되었지만 기본적으로는 동일합니다...

제네릭이나 채널을 사용하여 이 작업을 해결할 수 있는 방법이 있습니까? 슬라이스를 동일한 코어 유형으로 "변환"할 수 없습니까?

제안이나 아이디어를 보내주셔서 감사합니다!


정답


이러시면 안 됩니다.

range 표현식은 핵심 유형 으로 시작해야 합니다. 서로 다른 유형의 용어를 사용하는 공용체에는 공통 기본 유형이 없기 때문에 핵심 유형이 없습니다.

또한 왜 range에 핵심 유형이 필요한지 직관적으로 알 수 있습니다. 슬라이스와 채널 범위의 의미가 다릅니다.

  1. 채널 범위 지정은 차단 작업일 수 있지만 슬라이스 범위 지정은 차단 작업이 아닙니다

  2. 반복 변수가 다릅니다

으아아아

슬라이스의 경우 iint 类型的索引,item는 슬라이스 요소의 유형입니다.

으아아아

채널의 경우 item는 chan 요소의 유형이며 이것이 유일하게 가능한 범위 변수입니다.

가장 좋은 유형 스위치는 다음과 같습니다.

으아아아

하지만 이 함수의 동작(차단 대 비차단)은 유형에 따라 다르며 여기에서 제네릭을 사용하여 어떤 이점을 얻을 수 있는지 명확하지 않습니다.

위 내용은 채널과 슬라이스를 허용하는 일반 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿