golang.GoInAction.5-62

//《Go 語言實戰》 p110_listing60.go
//這個示例程序展現當內部類型和外部類型要
//實現同一個接口的方法

 

package main

 

import (
    "fmt"
)

 

//notifier 是一個定義了
//通知類行爲的接口
type notifier interface {
    notify()
}

 

//user 在程序裏定義了一個用戶類型
type user struct {
    name string
    email string
}

 

//經過user類型的指針
//調用的方法
func (u *user) notify() {
    fmt.Printf("Sending user email to %s<%s>\n",
        u.name,
        u.email)
}

 

//admin 表明一個擁有權限的管理員用戶
type admin struct {
    user
    level string
}

 

//經過admin類型的指針
//調用的方法
func (s *admin) notify() {
    fmt.Printf("Sending admin email to %s<%s>\n",
        s.name,
        s.email)
}

 

//main是應用程序的入口
func main() {
    //建立一個admin用戶
    ad := admin{
        user: user{
            name: "john smith",
            email: "john@yahoo.com",
        },
        level: "super",
    }

 

    //給admin用戶發送一個通知
    //接口的嵌入的內部類型實現並無提高到
    //外部類型
    sendNotification(&ad)

 

    //咱們能夠直接訪問內部類型的方法
    ad.user.notify()

 

    //內部類型的方法沒有被提高
    ad.notify()
}

 

//sendNotification接受一個實現了notifier接口的值
//併發送通知
func sendNotification(n notifier) {
    n.notify()
}
 
//outprint
//Sending admin email to john smith<john@yahoo.com>
//Sending user email to john smith<john@yahoo.com>
//Sending admin email to john smith<john@yahoo.com>
相關文章
相關標籤/搜索