本文介绍了为什么不能用指针接收器实现接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我很困惑为什么这无法编译:
不可能的类型断言:Faz 没有实现 Foo(Bar 方法有指针接收器)
如果我将 Faz.Bar 的接收器设为 Faz 值而不是 Faz 指针,那么它编译得很好,但我认为拥有指针接收器总是更好,这样值就不会被复制?
包主进口 (日志")功能主(){foo := New().(Faz)log.Println(foo)}输入 Foo 接口 {Bar() 字符串}func New() Foo {返回 &Faz{}}输入法兹结构{}func (f *Faz) Bar() 字符串 {返回`酒吧`}
解决方案
因为它是 *Faz
而不是 Faz
.
func main() {foo := New().(*Faz)log.Println(foo)}
I'm confused as to why this fails to compile with:
if I make the receiver for Faz.Bar a Faz value rather than a Faz pointer then it compiles fine, but I thought it was always better to have pointer receivers so values aren't being copied around?
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`
}
解决方案
Because it's *Faz
not Faz
.
func main() {
foo := New().(*Faz)
log.Println(foo)
}
这篇关于为什么不能用指针接收器实现接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!