1 回答

TA贡献1858条经验 获得超8个赞
当您调用 时fmt.Println
,它需要一个实现该Stringer
接口的对象。它记录如下:
如果操作数实现方法 String() string,将调用该方法将对象转换为字符串,然后根据动词(如果有)的要求进行格式化
该fmt
包还声明了Stringer
接口:
type Stringer interface {
String() string
}
这样的对象必须有一个String()不接受任何参数并返回一个string. fmt.Println然后调用该String方法。这让我们可以为自定义类型定义它们将如何打印出来。例如:
package main
import "fmt"
type Person struct {
name string
age int
}
func (p Person) String() string {
return fmt.Sprintf("%s<%d>", p.name, p.age)
}
func main() {
p := Person{name: "Joe", age: 39}
fmt.Println(p)
}
会打印出来:
Joe<39>
Person
因为我们自定义了将对象转换为字符串的方式。更多细节:
Go 之旅中的接口
Go 之旅中的 Stringer
如果您对包中实际发生这种情况的机制感兴趣fmt
,请查看.handleMethods
src/fmt/print.go
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报