1. 程式人生 > >golang.GoInAction.5-62

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: "
[email protected]
",         },         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<[email protected]> //Sending user email to john smith<[email protected]> //Sending admin email to john smith<[email protected]>