package main
import (
"fmt"
)
func (m *Man) SetName(name string) {
m.name = name
}
func (m Man) Println() {
fmt.Printf("Hi, my name's %s\n", m.name)
}
func (w Women) SetName(name string) {
w.name = name
}
func (w Women) Println() {
fmt.Printf("Hi, my name's %s\n", w.name)
}
type Person interface {
SetName(string)
}
type Man struct {
Person
name string
}
type Women struct {
Person
name string
}
func Test(pp Person) {
pp.SetName("Test")
}
func main() {
man := &Man{name: "man"}
women := &Women{name: "women"}
man.SetName("aa")
Test(man)
Test(women)
man.Println() //Hi, my name's Test
women.Println() //Hi, my name's women
man2 := Man{name: "man"}
women2 := Women{name: "women"}
// Test(man2)//编译不通过
Test(women2)
man2.Println() //Hi, my name's man
women2.Println() //Hi, my name's women
}
实验证明是支持的,只要你实现了他的方法,值和指针都可以传递