package main
import (
"fmt"
//"testpkg"
"strconv"
)
type Human struct {
name string
age int
}
func (h *Human) String() string { //此处如果修改为 Human则可以重载,如果*Human则不行
fmt.Println("is run")
return h.name + "-" + strconv.Itoa(h.age)
}
func main() {
jek := Human{"jek", 25}
fmt.Println(jek) //但是如果此处修改为 &jek就可以
}
在看书的时候写到这个例子,一开始以为是我写错,后来发现我比书上多了一个* func(h *Human),不太理解这里,求解答
如果按照下面写, 会提示prog.go:18: method redeclared: Human.String
而实际上
fmt.Println(jek)
fmt.Println(&jek)
这两个调用只会调用对应版本的String(), 编译器将 h *Human 和 h Human 视为同一类型, 但是调用的时候又分开了 h *Human 和 h Human 来调用