这个问题在这里已有答案:
我理解为什么我的方法签名不能用指针接收器 func (i *IPAddr) String() string
来实现 fmt.Stringer
接口 . 我虽然Golang会为我做(&i).String() - > i.String()魔术 . 但是,看起来 fmt.Printf
并未将其视为有效的Stringer实现 . 为什么?
完整代码:
package main
import "fmt"
type IPAddr [4]byte
func (i *IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", i[0], i[1], i[2], i[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)
fmt.Printf("%s", ip.String()) // Test
}
}