我在纵梁上做这个练习。
问题:使IPAddr类型实现fmt.Stringer将地址打印为虚线四边形。例如,IPAddr{1, 2, 3, 4}应该打印为"1.2.3.4".
起始代码:
package main
import "fmt"
type IPAddr [4]byte
// TODO: Add a "String() string" method to IPAddr.
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)
}
}
这是我的代码:
func (addr IPAddr) String() string {
return fmt.Sprintf("%v.%v.%v.%v", addr[0], addr[1], addr[2], addr[3])
}
它奏效了!但我不明白为什么。我已经收集到我不必显式定义Stringer接口,因为它包含在 中fmt,但是main()我的代码在函数中的哪个位置被使用?它是否会自动在IPAddr它找到的任何类型数据上运行它,这就是为什么在我不做任何事情的情况下修改地图的原因?这是我的第一个基于编译器的语言(我知道一些 Python 和 JavaScript),所以我不知道这个概念是否与其他语言相似。
天涯尽头无女友
相关分类