일반 슬라이스 인수와 슬라이스 유형 제약 조건
Go의 실험적인 슬라이스 패키지에서는 Contains와 Grow라는 두 함수가 서로 다른 유형의 인수를 사용합니다. 제약. Contains는 일반 []E 유형을 사용하는 반면 Grow는 인수 유형을 슬라이스(~[]E)로 제한합니다.
유형 제약 조건
유형 제약 조건, ~로 표시되며 유형이 특정 인터페이스 또는 규칙 세트를 준수하는지 확인합니다. Grow에서 ~[]E 제약 조건은 인수 유형이 궁극적으로 요소 유형 E를 갖는 슬라이스여야 함을 강제합니다.
동등한 기능?
다른 유형 제약 조건에도 불구하고 , 두 기능 내에서 사용 가능한 작업은 거의 동일하게 나타납니다. 그러나 함수가 입력 인수와 동일한 유형의 슬라이스를 반환해야 할 때 실질적인 주요 차이점이 나타납니다.
슬라이스 반환
동일한 유형의 슬라이스를 반환하는 경우 입력으로 ~[]E와 같은 유형 제약 조건을 사용하는 것이 중요합니다. 이를 통해 함수는 입력 슬라이스의 명명된 유형을 보존할 수 있습니다.
두 가지 버전의 Grow()를 고려하세요.
// Preserves named type func Grow[S ~[]E, E any](s S, n int) S {...} // Returns unnamed type func Grow2[E any](s []E, n int) []E {...}
Grow()가 사용자 정의 슬라이스 유형을 받으면 반환할 수 있습니다. Grow2()는 항상 이름 없는 슬라이스를 반환합니다.
데모
type MyInts []int x := MyInts{1} // Custom slice type x2 := Grow(x, 10) // Type preserved x3 := Grow2(x, 10) // Unnamed type
이 예에서 x2는 MyInts를 입력하고 x3은 이름이 없는 슬라이스가 됩니다.
결론
반환 값에서 입력 슬라이스의 이름이 지정된 유형을 유지해야 하는 경우 다음이 필요합니다. ~[]E와 같은 유형 제약 조건을 사용합니다. 그렇지 않으면 반환된 슬라이스는 항상 이름이 지정되지 않은 유형이 됩니다.
위 내용은 함수에서 슬라이스를 반환할 때 슬라이스 제약 조건이 유형 보존에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!