일반 슬라이스 인수: 구별 이해
Go에서 일반 프로그래밍은 함수가 다양한 유형에서 작동할 수 있도록 하는 유형 매개변수를 도입합니다. 관심 분야 중 하나는 슬라이스 유형으로 제한된 슬라이스 인수와 일반 슬라이스 인수 간의 차이입니다.
슬라이스 유형으로 제한된 슬라이스 인수
slices.Grow 함수를 다음과 같이 고려하세요. ~[]E로 제한된 첫 번째 인수입니다. 즉, 이 인수의 유형은 요소 유형이 E인 슬라이스 유형이어야 합니다.
일반 슬라이스 인수
반대로, Slices.Contains 함수를 고려하세요. 첫 번째 인수는 단순히 []E로 입력됩니다. 이는 E.
Practical Differences
처음에는 이 두 유형의 슬라이스 인수가 비슷하게 동작하는 것처럼 보일 수 있습니다. 둘 다 함수가 추가 및 범위와 같은 슬라이스 작업에 액세스할 수 있도록 허용합니다. 그러나 슬라이스를 반환할 때 미묘하지만 중요한 차이점이 있습니다.
슬라이스 반환
함수가 다음과 동일한 유형의 슬라이스를 반환해야 하는 경우 입력 슬라이스인 경우 슬라이스 유형(~[]E)으로 제한된 슬라이스 인수를 사용해야 합니다. 이렇게 하면 반환된 슬라이스에 올바른 기본 유형이 있는지 확인됩니다.
예제
두 개의 Grow() 구현을 비교해 보겠습니다. 하나는 ~[]E를 사용하고 다른 하나는 [를 사용합니다. ]E.
func Grow[S ~[]E, E any](s S, n int) S {
// ...
}
func Grow2[E any](s []E, n int) []E {
// ...
}
사용자 정의 유형(예: []MyInt)의 조각을 전달하면 Grow()는 동일한 유형의 값을 반환할 수 있습니다. 그러나 Grow2()는 일반 슬라이스 유형([]E)만 반환할 수 있습니다.
결론
요약하자면, 동일한 슬라이스 유형을 반환해야 하는 경우 type을 입력 슬라이스로 사용하려면 슬라이스 유형(~[]E)으로 제한된 슬라이스 인수를 사용해야 합니다. 그렇지 않으면 일반 슬라이스 인수를 사용하는 것으로 충분합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3