是否有一个与`fmt.Print`将使用的`ToString()`相当的Go?

时间:2016-12-19 23:59:51

标签: go

我查看了文档但无法找到此信息。 给定一个结构,是否可以实现一个方法(比如func (k Koala) String() string),在打印结构时,fmt.Print系列会自动使用该方法? 也许某处有界面,但我找不到它。

1 个答案:

答案 0 :(得分:5)

是的,它被称为fmt.Stringer()

  

Stringer由具有String方法的任何值实现,该方法定义该值的“本机”格式。 String方法用于将作为操作数传递的值打印到任何接受字符串的格式或打印到未格式化的打印机。

type Stringer interface {
    String() string
}

*print*功能本身不接受Stringer()界面,因为fmt.Println("foo")fmt.Println(someStringer)同样有效。我建议您通过print.go source code查看完全这是如何工作的,但简要介绍*print*函数:

  • 接受interface{};
  • 检查它是否为内置类型(例如stringint等)并进行相应格式化(如果是);
  • 检查类型是否具有.String()方法,如果存在则使用该方法。

准确的逻辑涉及更多。如上所述,我鼓励您自己查看源代码。它只是简单易懂的Go。