其他分享
首页 > 其他分享> > Golang 嵌入类型以及公开的属性和方法的解释

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

作者:互联网

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