"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 슬라이스 유형과 일반 슬라이스 인수로 제한된 슬라이스 인수를 언제 사용해야 합니까?

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

2024-11-09에 게시됨
검색:128

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

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

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)으로 제한된 슬라이스 인수를 사용해야 합니다. 그렇지 않으면 일반 슬라이스 인수를 사용하는 것으로 충분합니다.

릴리스 선언문 이 글은 1729666579에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3