go中的Stringer接口

任何语言里都有对输入输出的实现。go中提供了fmt包帮我们格式化输出字符串,其中最常用的是fmt.Printf和fmt.Println。

fmt.Printf和c语言的printf类似:

fmt.Printf("%v: %v\n", name, ip)

fmt.Println是单纯将参数字符串化然后输出断行:

fmt.Println(a, z)

但实际上,fmt在调用Printf或Println的时候,会对传入的参数对象查询并调用一个Stringer接口。这个Stringer接口有个String() 方法返回一个描述实例自身的字符串。但实际上,只要参数的类型实现了String()方法即可。

ps:其实就类似于js中默认调用定义在Object原型的toString()方法。

Stringer is a type that can describe itself as a string. The fmt package (and many others) look for this interface to print values.

看实例:

package main

import "fmt"
//定义Poeple类型并实现String方法
type Person struct {
	Name string
	Age  int
}
func (p Person) String() string {
  return fmt.Sprintf("%v (%v years)\n", p.Name, p.Age)	
}
//定义Sb类型并实现String方法
type Sb struct {
	Name string
	Age  int
}
func (a Sb) String() string {
	// return fmt.Sprintf("%v %v years", a.Name, a.Age)
	 return fmt.Sprint("sb")
}

func main() {
	a := Person{"A D", 18}
	z := Sb{"Z B", 16}
	fmt.Println(a, z)
}
//输出:
A D (18 years)
sb

上边代码中我们给Person和Sb显式定义了String方法,所以fmt就不调用默认的String方法,而是打印出我们期望的字符串。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值