반응형
서로 다른 두 조각의 동일성을 비교하는 것은 조각의 내용이 동일한지 또는 특정 관계를 나타내는지 확인해야 할 때 종종 필요합니다. 바둑에서는 두 조각의 길이가 같고 같은 순서에 일치하는 요소가 포함되어 있으면 두 조각이 같은 것으로 간주합니다.
연산자를 사용하여 두 조각의 동일성을 비교하려고 하면 컴파일 오류가 발생합니다. 따라서 비교 프로세스에서는 두 슬라이스의 요소를 반복하고 개별적으로 동등성을 평가해야 합니다.
Go에서 슬라이스 동등성을 비교하는 세 가지 주요 방법은 아래에 열거되어 있습니다:
연산자를 사용하여 두 조각의 동일성을 비교하려고 하면 컴파일 오류가 발생합니다. 따라서 비교 프로세스에서는 두 슬라이스의 요소를 반복하고 개별적으로 동등성을 평가해야 합니다.
Go에서 슬라이스 동등성을 비교하는 세 가지 주요 방법은 아래에 열거되어 있습니다:
1. Using slices.Equal()
Go v1.21에서는 여러 슬라이스 연산을 훨씬 쉽게 하기 위해 일반 슬라이스 패키지가 도입되었습니다. 내보낸 메서드 중 하나는 두 슬라이스의 동일성을 비교하는 데 도움이 되는 Equal()입니다.
package main
import (
"fmt"
"slices"
)
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{1, 2, 3}
slice3 := []int{1, 2, 3, 4, 5}
fmt.Println(slices.Equal(slice1, slice2)) // true
fmt.Println(slices.Equal(slice1, slice3)) // false
}
v1.18에서 v1.20 사이의 Go 릴리스를 실행 중인 경우, x/exp/slices 패키지를 대신 사용할 수 있습니다. 위의 기본 제공 슬라이스 패키지와 동일한 방식으로 작동합니다.
package main
import (
"fmt"
"golang.org/x/exp/slices"
)
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{1, 2, 3}
slice3 := []int{1, 2, 3, 4, 5}
fmt.Println(slices.Equal(slice1, slice2)) // true
fmt.Println(slices.Equal(slice1, slice3)) // false
}
2. Using reflect.DeepEqual()
반영 패키지에는 슬라이스를 포함한 다양한 데이터 구조의 동일성을 비교하는 데 사용할 수 있는 DeepEqual() 함수도 포함되어 있습니다:
package main
import (
"fmt"
"reflect"
)
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{1, 2, 3}
slice3 := []int{1, 2, 3, 4, 5}
fmt.Println(reflect.DeepEqual(slice1, slice2)) // true
fmt.Println(reflect.DeepEqual(slice1, slice3)) // false
}
3. Google의 go-cmp 패키지 사용
go-cmp 패키지는 테스트에서 Go 값의 동등성을 훨씬 쉽게 비교할 수 있도록 개발되었습니다. 기본적으로 반영.DeepEqual()의 보다 안전하고 포괄적인 대안이 될 수 있도록 만들어졌습니다. 다음과 같이 슬라이스 동등성을 비교하는 데 사용할 수 있습니다:
command
$ go get -u github.com/google/go-cmp/cmp
package main
import (
"fmt"
"github.com/google/go-cmp/cmp"
)
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{1, 2, 3}
slice3 := []int{1, 2, 3, 4, 5}
fmt.Println(cmp.Equal(slice1, slice2)) // true
fmt.Println(cmp.Equal(slice1, slice3)) // false
}
마지막 생각들
Go에서 슬라이스 동등성을 비교하는 세 가지 쉬운 방법이 있습니다. 보장하다 확인하세요. 슬라이스 문서를 자세한 내용은 언어에 제공되는 다른 유용한 기능에 대해 설명합니다.
출처: https://freshman.tech/snippets/go/compare-slices/
728x90
반응형
'Programing > Go' 카테고리의 다른 글
golang 디렉토리 기본 구조 (0) | 2024.06.13 |
---|---|
Golang에서 gRPC의 강력한 기능 공개: HTTP를 통한 엣지를 갖춘 강력하고 건강한 마이크로서비스 구축 (0) | 2024.06.12 |
Golang의 명명 규칙: 종합 가이드 (0) | 2024.06.12 |
golang package 는 싱글톤 인가? (0) | 2024.06.12 |
[GoLang] 2장: GIN 프레임워크 환경 설정 (0) | 2024.06.11 |
댓글