Code Fix

上級ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない › パターン1

ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない

ポインタレシーバで定義したメソッドは、その型の値そのもの(非ポインタ)のメソッドセットには含まれません。

 1  package main
 2  
 3  import "fmt"
 4  
 5  type Greeter interface {
 6  	Greet() string
 7  }
 8  
 9  type Person struct{ Name string }
10  
11  func (p *Person) Greet() string { return "hi " + p.Name }
12  
13  func main() {
14  	p := Person{Name: "go"}
15  	var g Greeter = _________
                         ^
16  	fmt.Println(g.Greet())
17  }
./main.go:15:18: cannot use p (variable of type Person) as Greeter value in variable declaration: Person does not implement Greeter (method Greet has pointer receiver)

空欄を埋めて実行を通す

広告
広告スロット(未設定)

ポインタレシーバのメソッドしか無い型は値ではinterfaceを満たさない

値をそのままinterface型の変数に代入しようとするとコンパイルエラーになります。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)