码迷,mamicode.com
首页 > 其他好文 > 详细

go 内嵌对象类型

时间:2019-02-09 16:29:59      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:div   point   efi   poi   ica   app   cal   cat   tween   

 

demo1

// Sample program to show how to embed a type into another type and
// the relationship between the inner and outer type.
package main

import (
    "fmt"
)

// user defines a user in the program.
type user struct {
    name  string
    email string
}

// notify implements a method that can be called via
// a value of type user.
func (u *user) notify() {
    fmt.Printf("Sending user email to %s<%s>\n",
        u.name,
        u.email)
}

// admin represents an admin user with privileges.
type admin struct {
    user  // Embedded Type
    level string
}

// main is the entry point for the application.
func main() {
    // Create an admin user.
    ad := admin{
        user: user{
            name:  "john smith",
            email: "john@yahoo.com",
        },
        level: "super",
    }

    // We can access the inner type‘s method directly.
    ad.user.notify()

    // The inner type‘s method is promoted.
    ad.notify()
}

输出

Sending user email to john smith<john@yahoo.com>
Sending user email to john smith<john@yahoo.com>

 

demo2

// Sample program to show how to embed a type into another type and
// the relationship between the inner and outer type.
package main

import (
    "fmt"
)

// user defines a user in the program.
type user struct {
    name  string
    email string
}

// notify implements a method that can be called via
// a value of type user.
func (u *user) notify() {
    fmt.Printf("Sending user email to %s<%s>\n",
        u.name,
        u.email)
}

// admin represents an admin user with privileges.
type admin struct {
    user  // Embedded Type
    level string
}

func (u *admin) notify() {
    fmt.Printf("admin method!\n")
}

// main is the entry point for the application.
func main() {
    // Create an admin user.
    ad := admin{
        user: user{
            name:  "john smith",
            email: "john@yahoo.com",
        },
        level: "super",
    }

    // We can access the inner type‘s method directly.
    ad.user.notify()

    // The inner type‘s method is promoted.
    ad.notify()
}

输出

Sending user email to john smith<john@yahoo.com>
admin method!

 

demo3

// Sample program to show how embedded types work with interfaces.
package main

import (
    "fmt"
)

// notifier is an interface that defined notification
// type behavior.
type notifier interface {
    notify()
}

// user defines a user in the program.
type user struct {
    name  string
    email string
}

// notify implements a method that can be called via
// a value of type user.
func (u *user) notify() {
    fmt.Printf("Sending user email to %s<%s>\n",
        u.name,
        u.email)
}

// admin represents an admin user with privileges.
type admin struct {
    user
    level string
}

// main is the entry point for the application.
func main() {
    // Create an admin user.
    ad := admin{
        user: user{
            name:  "john smith",
            email: "john@yahoo.com",
        },
        level: "super",
    }

    // Send the admin user a notification.
    // The embedded inner type‘s implementation of the
    // interface is "promoted" to the outer type.
    sendNotification(&ad)
}

// sendNotification accepts values that implement the notifier
// interface and sends notifications.
func sendNotification(n notifier) {
    n.notify()
}

输出

Sending user email to john smith<john@yahoo.com>

go 内嵌对象类型

标签:div   point   efi   poi   ica   app   cal   cat   tween   

原文地址:https://www.cnblogs.com/sea-stream/p/10357586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!