なぜ、インターフェイスはポインタにできないのでしょうか?
下記のコードのようにFooInterface
のポインタを受け取る関数Call
を定義するとコンパイルエラーになります。
package main
import "log"
type FooInterface interface {
DoSomething()
}
type Foo struct {
}
func (this *Foo) DoSomething() {
log.Println("Foo DoSomething was called")
}
func Call(foo *FooInterface) {
foo.DoSomething()
}
func main() {
Call(&Foo{})
}
エラーの内容
./main.go:17: foo.DoSomething undefined (type *FooInterface has no field or method DoSomething)
./main.go:21: cannot use Foo literal (type *Foo) as type *FooInterface in function argument:
*FooInterface is pointer to interface, not interface
下記のようにアスタリスク *
を取るとエラーがでなくなります
func Call(foo FooInterface) {
foo.DoSomething()
}