为什么不能用指针接收器实现接口

Dan*_*son 52 pointers interface go

我很困惑为什么这不能编译:

不可能的类型断言:Faz没有实现Foo(Bar方法有指针接收器)

如果我为Faz.Bar制作Faz.Bar的接收器而不是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`
}
Run Code Online (Sandbox Code Playgroud)

One*_*One 52

因为事实*Faz并非如此Faz.

func main() {
    foo := New().(*Faz)
    log.Println(foo)
}
Run Code Online (Sandbox Code Playgroud)

  • 它们可以是*Faz或Faz,但它们都必须匹配.如果你打算"返回Faz {}"或*Faz,如果你打算'return&Faz {}`那么定义它们所有的Faz.它们如何维护状态被视为您基本上隐藏在用户之外的实现细节. (4认同)