我对此为何无法编译感到困惑:



如果我将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`
}

最佳答案

因为它是*Faz而不是Faz

func main() {
    foo := New().(*Faz)
    log.Println(foo)
}

09-27 08:54