import (
"fmt"
)
type user struct {
name string
emial string
}
type notifier interface{
notify()
change()
}
func (u user) notify() {
fmt.Printf("name : %s\nemial : %s\n",u.name,u.emial)
}
func (u *user) change() {
u.emial = "lisa@newemail.com"
}
// 任何一个实现了 notifier 接口的值都可以传入 sendNotification 函数
func sendNotification(n notifier){
n.change()
n.notify()
}
func main() {
lisa := &user{"Lisa","lisa@emial.com"}
sendNotification(lisa)
}
运行结果:
name : Lisa
emial : lisa@newemail.com
内部类型的方法提升到外部类型
package main
import (
"fmt"
)
type user struct {
name string
email string
}
type admin struct {
user
level string
}
type notifier interface{
notify()
change()
}
func (u user) notify() {
fmt.Printf("name : %s\nemial : %s\n",u.name,u.email)
}
func (u *user) change() {
u.email = "lisa@newemail.com"
}
// 任何一个实现了 notifier 接口的值都可以传入 sendNotification 函数
func sendNotification(n notifier){
n.change()
n.notify()
}
func main() {
lisa := &user{"Lisa","lisa@emial.com"}
sendNotification(lisa)
ad := admin{
user:user{
name : "bill",
email : "bill@emial.com",
},
level: "super",
}
sendNotification(&ad.user)
// 用于实现接口的内部类型的方法提升到外部类型
sendNotification(&ad)
}
运行结果:
name : Lisa
emial : lisa@newemail.com
name : bill
emial : lisa@newemail.com
name : bill
emial : lisa@newemail.com