8.6 comparableについての補足
interfaceは比較可能なため、comparableな値としてコンパイルが通る。そのため、具象型が比較不可な型の場合に注意が必要な場合がある
code:go
package main
import (
"fmt"
)
type Thinger interface {
Thing()
}
type ThingerInt int
func (t ThingerInt) Thing() {
fmt.Println("ThingInt:", t)
}
type ThingerSlice []int
func (t ThingerSlice) Thing() {
fmt.Println("ThingSlice:", t)
}
if t1 == t2 {
fmt.Println("等しい!")
}
}
func main() {
var a int = 10
var b int = 10
Comparer(a, b) // 等しい!
var a2 ThingerSlice = []int{1, 2, 3}
var b2 ThingerSlice = []int{1, 2, 3}
var a3 Thinger = a2
var b3 Thinger = b2
Comparer(a3, b3) // panic: runtime error: comparing uncomparable type main.ThingerSlice
}