为什么不能用指针接收器实现接口 [英] Why can't the interface be implemented with pointer receivers

查看:68
本文介绍了为什么不能用指针接收器实现接口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很困惑为什么这无法编译:

<块引用><块引用>

不可能的类型断言: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:

impossible type assertion: Faz does not implement Foo (Bar method has pointer receiver)

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)
}

这篇关于为什么不能用指针接收器实现接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆