gpt4 book ai didi

go - Stringers 令人费解的行为?

转载 作者:IT王子 更新时间:2023-10-29 01:54:47 26 4
gpt4 key购买 nike

Go 新手,所以请多多包涵。

我一直在查看“围棋之旅”页面,无意中发现了一些关于 Stringer 的令人费解的东西。考虑 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])
}

然而,这不用于 f 主要打印只是 fmt.Printf("%v: %v\n", name, ip)。如果我将打印更改为 fmt.Printf("%v: %v\n", name, ip.String()),则无论接收方类型是 *IPAddr 都会使用它IPAddr)。

为什么会这样?

最佳答案

因为您将 IPAddr 值传递给 fmt.Printf,所以您的 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 的内容,或者*IPAddr,包含值接收者的方法。

关于go - Stringers 令人费解的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com