• interfaceは比較可能なため、comparableな値としてコンパイルが通る。そのため、具象型が比較不可な型の場合に注意が必要な場合がある
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)
}
 
func Comparer[T comparable](t1, t2 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
}