일반 슬라이스 인수: 구별 이해
Go에서 일반 프로그래밍은 함수가 다양한 유형에서 작동할 수 있도록 하는 유형 매개변수를 도입합니다. 관심 분야 중 하나는 슬라이스 유형으로 제한된 슬라이스 인수와 일반 슬라이스 인수를 구별하는 것입니다.
슬라이스 유형으로 제한된 슬라이스 인수
slice.Grow 함수를 고려해보세요. ~[]E로 제한된 첫 번째 인수입니다. 즉, 이 인수의 유형은 요소 유형이 E인 슬라이스 유형이어야 합니다.
일반 슬라이스 인수
반대로, Slices.Contains 함수를 고려하세요. 첫 번째 인수는 단순히 []E로 입력됩니다. 이는 요소 유형이 E인 모든 슬라이스 유형을 허용합니다.
실질적인 차이점
처음에는 이 두 가지 유형의 슬라이스 인수가 유사하게 동작하는 것처럼 보일 수 있습니다. 둘 다 함수가 추가 및 범위와 같은 슬라이스 작업에 액세스할 수 있도록 허용합니다. 그러나 슬라이스를 반환할 때 미묘하지만 중요한 차이점이 있습니다.
슬라이스 반환
함수가 다음과 같은 유형의 슬라이스를 반환해야 하는 경우 입력 슬라이스인 경우 슬라이스 유형(~[]E)으로 제한된 슬라이스 인수를 사용해야 합니다. 이렇게 하면 반환된 슬라이스에 올바른 기본 유형이 있는지 확인됩니다.
예
두 개의 Grow() 구현을 비교해 보겠습니다. 하나는 ~[]E를 사용하고 다른 하나는 [를 사용합니다. ]E.
<code class="go">func Grow[S ~[]E, E any](s S, n int) S { // ... } func Grow2[E any](s []E, n int) []E { // ... }</code>
사용자 정의 유형(예: []MyInt)의 조각을 전달하면 Grow()는 동일한 유형의 값을 반환할 수 있습니다. 그러나 Grow2()는 일반 슬라이스 유형([]E)만 반환할 수 있습니다.
결론
요약하면, 동일한 슬라이스를 반환해야 하는 경우 type을 입력 슬라이스로 사용하려면 슬라이스 유형(~[]E)으로 제한된 슬라이스 인수를 사용해야 합니다. 그렇지 않으면 일반 슬라이스 인수를 사용하는 것으로 충분합니다.
위 내용은 Go에서 슬라이스 유형과 일반 슬라이스 인수로 제한된 슬라이스 인수를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!