上級 › ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない › パターン2
ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない
ポインタレシーバで定義したメソッドは、その型の値そのもの(非ポインタ)のメソッドセットには含まれません。
1 package main 2 3 import "fmt" 4 5 type Writer interface { 6 Write() string 7 } 8 9 type Logger struct{ Prefix string } 10 11 func (l *Logger) Write() string { return l.Prefix + ": ok" } 12 13 func main() { 14 l := Logger{Prefix: "info"} 15 var w Writer = _________ ^ 16 fmt.Println(w.Write()) 17 }
./main.go:15:17: cannot use l (variable of type Logger) as Writer value in variable declaration: Logger does not implement Writer (method Write has pointer receiver)
空欄を埋めて実行を通す
ポインタレシーバのメソッドしか無い型は、値そのもののメソッドセットには含まれません。interfaceへの代入時にアドレスを取れないと満たせません。
次の問題