fmt包中定义的最普遍的接口
Stringer是一个可以用字符串来描述自己的类型
fmt包(还有很多包)中的很多方法都是通过Stringer接口来打印值的
package mainimport "fmt"func main() {fmt.Println("Hello,go!")var stu Studentstu.IdCard(123, "张伟")fmt.Println(stu)// 原来还可以给Student这样赋值和定义stu2 := Student{111, "李明"}fmt.Println(stu, stu2)}type Student struct {Id intName string}func (student *Student) IdCard(id int, name string) {student.Id = idstudent.Name = name}// 相当于重写了fmt中的Println方法,因为fmt中的很多方法都是通过Stringer来打印的func (stu Student) String() string {// return fmt.Sprintf("%v %v", stu.Id, stu.Name)return "yes"}
练习:
将一个IP地址进行重新输出
package mainimport "fmt"type IPAddr [4]bytefunc (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)}}
