go接口作为参数时,能否支持指针传递


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

}

实验证明是支持的,只要你实现了他的方法,值和指针都可以传递

添加新评论