- // Sample program to show how polymorphic behavior with interfaces.
- package main
- import (
- "fmt"
- )
- // notifier is an interface that defines notification
- // type behavior.
- type notifier interface {
- notify()
- }
- // user defines a user in the program.
- type user struct {
- name string
- email string
- }
- // notify implements the notifier interface with a pointer receiver.
- func (u *user) notify() {
- fmt.Printf("Sending user email to %s<%s>\n",
- u.name,
- u.email)
- }
- // admin defines a admin in the program.
- type admin struct {
- name string
- email string
- }
- // notify implements the notifier interface with a pointer receiver.
- func (a *admin) notify() {
- fmt.Printf("Sending admin email to %s<%s>\n",
- a.name,
- a.email)
- }
- // main is the entry point for the application.
- func main() {
- // Create a user value and pass it to sendNotification.
- bill := user{"Bill", "bill@email.com"}
- sendNotification(&bill)
- // Create an admin value and pass it to sendNotification.
- lisa := admin{"Lisa", "lisa@email.com"}
- sendNotification(&lisa)
- }
- // sendNotification accepts values that implement the notifier
- // interface and sends notifications.
- func sendNotification(n notifier) {
- n.notify()
- }
输出
- Sending user email to Bill<bill@email.com>
- Sending admin email to Lisa<lisa@email.com>
go 多态
来源: http://www.bubuko.com/infodetail-2948437.html