Go 新手,请耐心等待。
我一直在浏览“Tour of Go”页面,无意中发现了一些关于 Stringers 的令人费解的事情。考虑以下练习:https://tour.golang.org/methods/18
我最初的答案是实施
func (this *IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", this[0], this[1], this[2], this[3])
}
然而,这并不用于主要打印fmt.Printf("%v: %v\n", name, ip)
。如果我将打印更改为fmt.Printf("%v: %v\n", name, ip.String())
,然后使用接收器类型是否为*IPAddr
or IPAddr
).
为什么会发生这种情况?
因为你正在传递一个IPAddr
价值fmt.Printf
, your String()
方法不是方法集的一部分。如果您传入指针,您的解决方案将有效:
fmt.Printf("%v: %v\n", name, &ip)
但一般的解决方案是不使用指针接收器:
func (ip IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}
这样一来String()
方法可以从IPAddr
,这就是你要传递给的Printf
, or an *IPAddr
,其中包括值接收者的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)