Goでは同じサイズの配列同士の比較には==
演算子が使えるが、サイズが違う配列やslice同士の比較には==
が使えない。
手っ取り早く比較したいときはreflect.DeepEqual
をつかうとタイプ数が少なくて便利。
package main
import (
"fmt"
"reflect"
)
func main() {
a := []byte{1, 2, 3}
b := []byte{1, 2, 3, 4}
c := [3]byte{1, 2, 3}
// これはコンパイルエラー
// fmt.Println(a == b)
// fmt.Println(a == c)
// reflect.DeepEqual をつかうと何でも比較できる
fmt.Println(reflect.DeepEqual(a, b)) // => false
fmt.Println(reflect.DeepEqual(a, b[0:3])) // => true
fmt.Println(reflect.DeepEqual(a, c)) // => false
fmt.Println(reflect.DeepEqual(a, c[:])) // => true
}
gomega
のmatcherが使ってたのを見て知った。