본문 바로가기
Programing/Go

Go에서 슬라이스 동일성을 비교하는 방법

by 멍멍돌이야 2024. 6. 14.
반응형
서로 다른 두 조각의 동일성을 비교하는 것은 조각의 내용이 동일한지 또는 특정 관계를 나타내는지 확인해야 할 때 종종 필요합니다. 바둑에서는 두 조각의 길이가 같고 같은 순서에 일치하는 요소가 포함되어 있으면 두 조각이 같은 것으로 간주합니다.

연산자를 사용하여 두 조각의 동일성을 비교하려고 하면 컴파일 오류가 발생합니다. 따라서 비교 프로세스에서는 두 슬라이스의 요소를 반복하고 개별적으로 동등성을 평가해야 합니다.

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
반응형

댓글