1. package main
    2. import (
    3. "fmt"
    4. )
    5. type People struct {
    6. Name string
    7. }
    8. func (p *People) String() string {
    9. return fmt.Sprintf("print: %v", p)//fmt会调用这里实现的String方法
    10. }
    11. func main() {
    12. p := &People{Name: "ss"}
    13. p.String()
    14. }

    如果一个类型实现了 String方法,那么在调用fmt包打印该类型的值的时候,会直接使用该类型实现的String方法,因此会产生循环调用。