Language
interface: sliceを格納した値同士の比較はpanicになる
interface自体は比較可能でも、動的な値がsliceなら==の評価時にpanicします。
Sourcecomparison.go
Go 1.22
package interfacevalue
func CompareSlicesAsAnyPanics() (recovered any) {
left := any([]int{1})
right := any([]int{1})
defer func() {
recovered = recover()
}()
_ = left == right
return nil
}Testcomparison_test.go
Go 1.22
package interfacevalue
import "testing"
func TestSliceを持つinterface値同士の比較はpanicになる(t *testing.T) {
if recovered := CompareSlicesAsAnyPanics(); recovered == nil {
t.Fatal("CompareSlicesAsAnyPanics() did not panic")
}
}01Assertion
このテストで確認できること
- 2つの[]intをanyへ代入する
- any同士を==で比較するとpanicする
anyを比較するコードは、実行時の動的型が比較可能かに依存します。slice・map・funcを含み得る値ではreflect.DeepEqualやドメイン固有の比較を明示します。
OBSERVED RESULT
any([]int{1}) == any([]int{1})
→ panic: comparing uncomparable type []int