美文网首页
Go 接口与指针接收器的问题

Go 接口与指针接收器的问题

作者: ProgrammingGuy | 来源:发表于2020-02-08 16:52 被阅读0次
package main

import "fmt"

type mouth interface {
    talk()
}

type person struct {
    height int
}

func (p *person) talk() {
    fmt.Println("我的身高:", p.height)
}

func sayHeight(i mouth) {
    i.talk()
}

func main() {
    p := person{height: 148}
    sayHeight(p)
}

提示错误

# command-line-arguments
.\main.go:23:11: cannot use p (type person) as type mouth in argument to sayHeight:
        person does not implement mouth (talk method has pointer receiver)

因为我只实现*person的接口,而没实现person的接口,所以在sayHeight时,需要将p改为&p

package main

import "fmt"

type mouth interface {
    talk()
}

type person struct {
    height int
}

func (p *person) talk() {
    fmt.Println("我的身高:", p.height)
}

func sayHeight(i mouth) {
    i.talk()
}

func main() {
    p := person{height: 148}
    sayHeight(&p)
}
image.png

相关文章

  • Go 接口与指针接收器的问题

    提示错误 因为我只实现*person的接口,而没实现person的接口,所以在sayHeight时,需要将p改为&p。

  • Go语言之Interface(二)

    使用指针接收器和值接收器实现接口 实现多个接口 接口嵌套 在Go语言中没有继承的概念,但是通过组合可以实现继承的效...

  • uber go 编码规范

    内容列表 指导原则指向interface的指针接收器(receiver)与接口零值Mutex是有效的在边界处拷贝S...

  • Go接口实例

    Go支持在struct类型上定义的方法。area方法有一个* rect类型的接收器。可以为指针或值接收器类型定义方...

  • Go接口实例

    Go支持在struct类型上定义的方法。area方法有一个* rect类型的接收器。可以为指针或值接收器类型定义方...

  • Go的指针类型与接口

    Go中的指针类型有一个约定:任一指针具有其地址指带的实体(最常见的是结构体,当然也可以是字符串、数字或者其他指针等...

  • Go Method

    Go语言同时支持函数和方法,方法是包含接收器的函数,接收器可以是命名类型或结构体类型的值或指针。为特定类型定义的方...

  • GO学习笔记(12)-斐波那契数列与函数编程

    目录 函数指针 vs 函数式编程 闭包 斐波那契数列与函数接口 函数指针 vs 函数式编程 函数是go语言中的...

  • go 接收器

    go的函数调用包括两种:1、有接收器的,我们称之为方法;2、无接收器的,我们称之为函数;方法又包含两种:1、指针方...

  • GO接口可能产生的空指针问题

    一个例子 运行后报错 主要原因是 if out != nil 这个判断为true,但是out实际的可写入指针为ni...

网友评论

      本文标题:Go 接口与指针接收器的问题

      本文链接:https://www.haomeiwen.com/subject/pavixhtx.html