Когда я изучал Go по книге "Go In Action", есть код сегмента, как показано ниже.
Я не изучил Go слишком много в его концепции интерфейса.
Сегмент определяет интерфейс, называемый уведомителем, используемый для уведомления людей, и два типа (пользователь, администратор) подразумевают этот интерфейс. Существует промежуточное программное обеспечение, говорит sendNotification (), которое унифицирует тип, который подразумевает интерфейс уведомителя
Что меня смущает, так это параметр функции middleware sendNotification (), он получает значение (не указатель!) Типа нижнего интерфейса (уведомителя). Но почему для вызова этой функции в основной функции используется указатель:
sendNodification (& LISA)
sendNodification (& миллиард)
?? только почему?
windows 10. Go 1.12.2
package main
import "fmt"
type notifier interface {nodify()}
type user struct {name string;email string}
type admin struct{name string;email string}
func (u *user) nodify (){
fmt.Printf("sending user email to %s<%s>\n", u.name, u.email)
}
func (u *admin) nodify(){
fmt.Printf("sending admin email to %s<%s>\n", u.name, u.email)
}
func sendNodification(n notifier){
n.nodify()
}
func main(){
bil := user{"Bill", "bill@gmail.com"}
sendNodification(&bil)
lisa := admin{"Lisa", "lisa@qq.com"}
sendNodification(&lisa)
}