• go 内嵌对象类型


    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>
    ",
            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>
    ",
            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!
    ")
    }
    
    // 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>
    ",
            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>
  • 相关阅读:
    【JavaWeb】DbUtils入门之QueryRunner
    详解 hibernate mapping配置
    hibernate-mapping的各种属性配置
    Hibernate入门这一篇就够了
    记一次Sql优化过程
    ExtJs双ActionResult共用同一Js文件ID冲突解决方案
    ExtJs批量更新
    枚举初使用
    Dapper连接Oracle
    读取Excel任务列表并显示在Outlook日历上
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10357586.html
Copyright © 2020-2023  润新知