golang.GoInAction.5-62
阿新 • • 發佈:2018-12-06
//《Go 語言實戰》 p110_listing60.go
//這個示例程式展示當內部型別和外部型別要
//實現同一個介面的方法
//通過user型別的指標
//呼叫的方法
func (u *user) notify() {
fmt.Printf("Sending user email to %s<%s>\n",
u.name,
u.email)
}
//通過admin型別的指標
//呼叫的方法
func (s *admin) notify() {
fmt.Printf("Sending admin email to %s<%s>\n",
s.name,
s.email)
}
[email protected]",
},
level: "super",
}
package main
import ( "fmt" )
//notifier 是一個定義了 //通知類行為的介面 type notifier interface { notify() }
//user 在程式裡定義了一個使用者型別 type user struct { name string email string }
//admin 代表一個擁有許可權的管理員使用者 type admin struct { user level string }
//main是應用程式的入口 func main() { //建立一個admin使用者 ad := admin{ user: user{ name: "john smith", email: "
//給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]>