슬라이스에 특정 요소가 포함되어 있는지 확인하는 것은 프로그래밍에서 일반적인 작업입니다. 그러나 Go 프로그래밍 언어에는 이러한 목적을 위한 내장 기능이 없습니다.
한 가지 접근 방식은 인터페이스{} 유형을 사용하는 것입니다.
<code class="go">func sliceContains(slice []interface{}, elem interface{}) bool { for _, item := range slice { if item == elem { return true } } return false }</code>
그러나 이 접근 방식을 사용하려면 수동으로 코드를 작성해야 합니다.
다행히도 Go의 리플렉션 패키지는 모든 슬라이스 유형을 처리할 수 있는 일반 코드를 허용합니다.
<code class="go">func Contains(slice, elem interface{}) bool { sv := reflect.ValueOf(slice) // Check if slice is valid if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array { return false } // Iterate over slice elements for i := 0; i < sv.Len(); i++ { if elem == sv.Index(i).Interface() { return true } } // Element not found return false }</code>
리플렉션 기반 접근 방식은 일반적이지만 유형별 비제네릭 함수에 비해 상당한 성능 저하가 발생합니다. 벤치마크에서는 50~60배의 속도 저하가 나타났습니다.
Generic: 730.23214 ns/op Non-Generic: 13.15262 ns/op
리플렉션은 슬라이스 요소 검사를 위한 일반 코드를 작성하는 방법을 제공하지만 성능 균형을 신중하게 평가하는 것이 중요합니다. . 성능이 중요한 시나리오의 경우 유형별 비일반 함수를 사용하는 것이 좋습니다.
위 내용은 Go에서 슬라이스 요소 존재 여부를 일반적으로 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!