【发布时间】:2015-08-04 21:16:22
【问题描述】:
我很困惑为什么编译失败:
不可能的类型断言: Faz 没有实现 Foo(Bar 方法有指针接收器)
如果我将 Faz.Bar 的接收器设为 Faz 值而不是 Faz 指针,那么它可以正常编译,但我认为拥有指针接收器总是更好,这样值就不会被复制?
package main
import (
"log"
)
func main() {
foo := New().(Faz)
log.Println(foo)
}
type Foo interface {
Bar() string
}
func New() Foo {
return &Faz{}
}
type Faz struct {
}
func (f *Faz) Bar() string {
return `Bar`
}
【问题讨论】:
-
附带说明:@KerrekSB 引用的文章有助于我理解当 Go 抱怨“MyFoo 没有实现 Foo(Bar 方法有指针接收器)”时,它没有意味着您不能使用指针接收器。这意味着实现
Bar的MyFoo方法中的none 应该有指针接收器,或者all 必须有。这与@0xor1 遇到的问题不同,但其他人可能会发现这个问题,因为他们混合了他们的接收器类型(就像我一样)并且不理解他们得到的错误。