Go에서 배열에 특정 요소가 포함되는지 확인하는 방법
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- 슬라이스 반복은 요소 확인의 가장 간단한 방법입니다.
- 맵을 사용하면 빈번한 확인에 대해 더 빠른 조회가 가능합니다.
- 배열은 고정 크기인 반면, 슬라이스는 Go에서 더 유연합니다.
Go에서 배열은 고정 크기를 가지며 컬렉션 크기가 변경될 수 있는 상황에서는 일반적으로 사용되지 않습니다. 대신 동적으로 크기가 조정되는 슬라이스가 더 일반적으로 사용됩니다. 슬라이스에 특정 요소가 포함되어 있는지 확인하려면 슬라이스를 반복하고 각 요소를 대상 값과 비교하면 됩니다.
다음은 이를 수행하는 방법의 예입니다.
package main import "fmt" func contains(slice []int, element int) bool { for _, v := range slice { if v == element { return true } } return false } func main() { numbers := []int{1, 2, 3, 4, 5} fmt.Println(contains(numbers, 3)) // Output: true fmt.Println(contains(numbers, 6)) // Output: false }
이 예제에서 contains
함수는 슬라이스의 각 요소를 반복합니다. 대상 값과 일치하는 요소를 찾으면 true
를 반환합니다. 일치하는 항목을 찾지 못하고 루프를 완료하면 false
를 반환합니다.
이 접근 방식은 모든 유형의 슬라이스에 적용됩니다. 예를 들어 문자열 슬라이스에서 문자열을 확인하려면 다음과 같이 함수를 수정할 수 있습니다.
package main import "fmt" func contains(slice []string, element string) bool { for _, v := range slice { if v == element { return true } } return false } func main() { words := []string{"apple", "banana", "cherry"} fmt.Println(contains(words, "banana")) // Output: true fmt.Println(contains(words, "date")) // Output: false }
이 검사를 자주 수행해야 하거나 큰 슬라이스에서 수행해야 하는 경우 맵 조회가 평균적으로 일정한 시간 복잡도를 가지므로 맵을 사용하여 더 빠른 조회를 고려할 수 있습니다. 다음은 그 방법입니다.
package main import "fmt" func main() { elements := map[int]struct{}{1: {}, 2: {}, 3: {}, 4: {}, 5: {}} _, exists := elements[3] fmt.Println(exists) // Output: true _, exists = elements[6] fmt.Println(exists) // Output: false }
이 예제에서는 요소 유형의 키와 빈 구조체 값을 가진 맵을 사용합니다. 빈 구조체는 0바이트를 차지하므로 추가 정보를 저장할 필요가 없을 때 메모리 효율적인 선택입니다.
배열은 Go의 유형 시스템의 일부이지만 슬라이스는 유연성과 동적 크기 조정으로 인해 더 일반적으로 사용됩니다.
FAQs
Go의 슬라이스에는 내장된 포함 검사가 없으므로 반복은 간단하고 직접적인 접근 방식입니다.
빠른 조회가 필요한 경우 맵 연산이 큰 슬라이스를 반복하는 것보다 더 효율적이므로 맵을 사용하십시오.
예, string
또는 float64
와 같은 다양한 유형으로 작동하도록 함수를 수정할 수 있습니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포하세요
- 사용량에 대해서만 지불하세요 — 요청 없음, 요금 없음.
탁월한 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 스케일링.
- 운영 오버헤드가 없으며 구축에만 집중하십시오.
Documentation에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ