Home > Mobile >  Golang interface conversion error: missing method
Golang interface conversion error: missing method

Time:10-21

Look at this snippet:

package main

type Interface interface {
    Interface()
}

type Struct struct {
    Interface
}

func main() {
    var i interface{} = Struct{}
    _ = i.(Interface)
}

struct Struct has a embeded member implements interface Interface. When I compile this snippet, I get an error:

panic: interface conversion: main.Struct is not main.Interface: missing method Interface

This seems weird because struct Struct should inherit method Interface from the embeded interface Interface.

I want to know why this error happens? Is it designed as this in golang or is it just a bug of golang compiler?

CodePudding user response:

You can't have both a field and a method with the same name, which is what happens when you embed something named X that provides a method X().

As written. Struct{}.Interface is a field, not a method. There is no Struct.Interface(), only Struct.Interface.Interface().

Rename your interface. For example, this works fine:

package main

type Foo interface {
    Interface()
}

type Struct struct {
    Foo
}


func main() {
    var i interface{} = Struct{}
    _ = i.(Foo)
}
  •  Tags:  
  • go
  • Related