>백엔드 개발 >Golang >함수에서 슬라이스를 반환할 때 슬라이스 제약 조건이 유형 보존에 어떤 영향을 미치나요?

함수에서 슬라이스를 반환할 때 슬라이스 제약 조건이 유형 보존에 어떤 영향을 미치나요?

Patricia Arquette
Patricia Arquette원래의
2024-10-23 15:45:02844검색

When Returning Slices from Functions, How Do Slice Constraints Affect Type Preservation?

일반 슬라이스 인수와 슬라이스 유형 제약 조건

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

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