ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Golang 值类型结构体和指针类型的结构体实现接口的区别(方法集)

2022-05-27 23:34:07  阅读:167  来源: 互联网

标签:接收者 Golang user 类型 结构 方法 email 指针


方法集

这里先说一下golang的方法集的概念,有助于下面代码的理解:
golang的方法集定义了一组关联到给定类型的值或者指针的方法。定义方法时使用的接收者的类型决定了这个方法是关联到值还是关联到指针,还是都关联。
翻译一下官方的定义就是如果接口接受的是一个指针接收者类型的值,那么可以使用值类型或者指针类型的接口实现,否则只能用值类型接收值实现。并且指针接收者类型实现后可以使用接口的所有的方法(包括使用值类型接受的方法),反之,如果是值类型接受实现,那么只能调用接口中其他的值类型的方法
代码:

package main

import "fmt"

type  notifier interface {
    notify()
}

type user struct {
    name string
    email string
}
//注意这里是指针类型接收者
func (u *user) notify()  {
    fmt.Printf("Send user email to %s,%s \n",u.name,u.email)
}
func main() {
    u:=user{
        name:  "汤姆",
        email: "qiong@email.com",
    }
    send(&u) //这里是指针类型的接收者 使用send(u)则会报错!

}

func send(n notifier)  {
    n.notify()
}

标签:接收者,Golang,user,类型,结构,方法,email,指针
来源: https://www.cnblogs.com/ikai/p/16319420.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有