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が使ってたのを見て知った。