fmt包中定义的最普遍的接口
Stringer是一个可以用字符串来描述自己的类型
fmt包(还有很多包)中的很多方法都是通过Stringer接口来打印值的
package main
import "fmt"
func main() {
fmt.Println("Hello,go!")
var stu Student
stu.IdCard(123, "张伟")
fmt.Println(stu)
// 原来还可以给Student这样赋值和定义
stu2 := Student{111, "李明"}
fmt.Println(stu, stu2)
}
type Student struct {
Id int
Name string
}
func (student *Student) IdCard(id int, name string) {
student.Id = id
student.Name = name
}
// 相当于重写了fmt中的Println方法,因为fmt中的很多方法都是通过Stringer来打印的
func (stu Student) String() string {
// return fmt.Sprintf("%v %v", stu.Id, stu.Name)
return "yes"
}
练习:
将一个IP地址进行重新输出
package main
import "fmt"
type IPAddr [4]byte
func (ip IPAddr) String() string {
return fmt.Sprintf("%v.%v.%v.%v", ip[0], ip[1], ip[2], ip[3])
}
func main() {
hosts := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for name, ip := range hosts {
fmt.Printf("%v : %v\n", name, ip)
}
}