上級 › ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない › パターン4
ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない
ポインタレシーバで定義したメソッドは、その型の値そのもの(非ポインタ)のメソッドセットには含まれません。
1 package main 2 3 import "fmt" 4 5 type Closer interface { 6 Close() string 7 } 8 9 type File struct{ Path string } 10 11 func (f *File) Close() string { return f.Path + " closed" } 12 13 func main() { 14 f := File{Path: "a.txt"} 15 var c Closer = _______ ^ 16 fmt.Println(c.Close()) 17 }
./main.go:15:17: cannot use f (variable of type File) as Closer value in variable declaration: File does not implement Closer (method Close has pointer receiver)
空欄を埋めて実行を通す
値のメソッドセットにポインタレシーバのメソッドは含まれないため、interfaceを満たすには&で明示的にポインタを渡す必要があります。
次の問題