ICode9

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

Golang 嵌入类型以及公开的属性和方法的解释

2022-05-29 00:02:50  阅读:180  来源: 互联网

标签:嵌入 Golang 调用 notify 类型 属性 方法 email user


package main

//当用接收者的类型是值类型的时候,只能调用或者传参为值类型,且只能在调用的时候实现值类型的方法
//当接收者是指针的接收者的时候,可以调用所有的接口的方法集。
//且 指针接受者的方法优先级最高,即使指针接收者可以调用值类型的方法,但是对于修改地址变量不生效。
//外部类型的结构体会拥有嵌入的结构体的方法,并且方法可以在外部类型结构体中重写。

//关于引入公开包中的是否公开属性,
//1.大写开头的方法或者属性为外部可访问的属性和方法 小写则是私有
//第一: 标识符才有公开或者未公开属性值没有。
//第二 短变量操作符有能力捕获引用的类型,并创建一个为公开的类型的变量。
//永远不能显示创建一个公开的变量,不过短变量声明操作符可以这么做
import "fmt"

//notifier 定义了一个通知类行为的接口
type notifier interface {
    notify()
}
//user定义了一个用户类型
type user struct {
    name string
    email string
}

func (u *user) notify ()  {
    fmt.Printf("Sending user email %s,%s\n",u.name,u.email)
}

type admin struct {
    user //嵌入类型
    level string
}

func (a *admin) notify()  {
    fmt.Printf("Sending admin email %s,%s \n",a.name,a.email)
}

func main() {
    ad:= admin{
        user:  user{
                name: "John",
                email: "John@yahoo.com",
        },
        level: "super",
    }
    sendNotification(&ad) //这里会程序会自己去找方法,如本身存在则直接执行,否则会去找父级的方法 否则报错!
    ad.user.notify() //调用父级类型的方法
    ad.notify() //调用自己的方法
}
func sendNotification(n notifier)  {
    n.notify()
}

标签:嵌入,Golang,调用,notify,类型,属性,方法,email,user
来源: https://www.cnblogs.com/ikai/p/16322592.html

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

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

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

ICode9版权所有