search
LoginSignup
5

More than 5 years have passed since last update.

posted at

Organization

[教えて]Go言語:なぜインターフェイスはポインタにできない?

なぜ、インターフェイスはポインタにできないのでしょうか?

下記のコードのように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()
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5