上級 › does not satisfy(ジェネリクスの制約違反)の原因と直し方 › パターン4
does not satisfy(ジェネリクスの制約違反)の原因と直し方
ジェネリック関数の型パラメータには制約(constraint)を指定できます。
1 package main 2 3 import "fmt" 4 5 type Number interface { 6 ~int | ~float64 7 } 8 9 func sum[T Number](vals []T) T { 10 var total T 11 for _, v := range vals { 12 total += v 13 } 14 return total 15 } 16 17 func main() { 18 fmt.Println(sum(__________________)) ^ 19 }
./main.go:18:17: rune does not satisfy Number (rune missing in ~int | ~float64)実際はint32型として扱われる
空欄を埋めて実行を通す
runeはint32のエイリアスですが、制約が~intのように書かれていてもruneという別名の型自体は基底型がint32でありintではないため一致しません。
次の問題