>  기사  >  백엔드 개발  >  Go에서 슬라이스 유형과 일반 슬라이스 인수로 제한된 슬라이스 인수를 언제 사용해야 합니까?

Go에서 슬라이스 유형과 일반 슬라이스 인수로 제한된 슬라이스 인수를 언제 사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-24 04:55:30364검색

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in Go?

일반 슬라이스 인수: 구별 이해

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.