String()方法
对于定于了String()方法的类型,默认输出的时候会调用该方法,实现字符串的打印。例如下面代码:
package main
import "fmt"
type Man struct {
name string
}
func (m Man) String() string {
return "My name is :" + m.name
}
func main() {
var m Man
m.name = "SNS"
fmt.Println(m)
}
输出:
My name is :SNS
使用指针
然而,如果使用func (m *Man) String() string
方式定义函数,那么就不会自动调用该函数输出(go version go1.12.1 windows/amd64
)。
package main
import "fmt"
type Man struct {
name string
}
func (m *Man) String() string {
return "My name is :" + m.name
}
func main() {
var m Man
m.name = "SNS"
fmt.Println(m)
}
输出:
{SNS}
为什么使用指针方式定义String()方法就不行了?
我的思考是,如果传入的是指针类型,那么String方法可能修改原来的数据,Go语言会认为此时的String()方法并不一定是单纯的输出字符串,因此如