Code Fix

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

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

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

 1  package main
 2  
 3  import "fmt"
 4  
 5  type Runner interface {
 6  	Run() string
 7  }
 8  
 9  type Task struct{ Name string }
10  
11  func (t *Task) Run() string { return t.Name + " done" }
12  
13  func main() {
14  	t := Task{Name: "build"}
15  	var r Runner = _______
                       ^
16  	fmt.Println(r.Run())
17  }
./main.go:15:17: cannot use t (variable of type Task) as Runner value in variable declaration: Task does not implement Runner (method Run has pointer receiver)

空欄を埋めて実行を通す

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

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

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

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

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