关于fmt包优先打印类型Stringf方法结果的疑问?

在《GO语言圣经》2.5章节中有这样的描述:

当使用fmt包的打印方法时,将会优先使用该类型对应的String方法返回的结果打印

于是我写了下面的代码

type mystr string

func (s *mystr) String() string {
    return fmt.Sprintf("name:%s", *s)
}

func main() {
    mystr := "hello"
    fmt.Println(mystr)
}

打印结果是:hello 并没有调用String() 为什么? 或者什么情况下调用,什么情况下不会调用?

已邀请:

stevewang

赞同来自: 傅小黑

在main函数里,mystr是个变量名,类型是string,所以fmt.Println当然打印字符串自身。 你想要的可能是这样:

type mystr string

func (s mystr) String() string {
    return fmt.Sprintf("name:%s", string(s))
}

func main() {
    str := mystr("hello")
    fmt.Println(str)
}

要回复问题请先登录注册