День добрый.
В Go я полный ноль. Поэтому читаю вскую документацию.
Наткнулся на вот такой пример:
https://go.dev/tour/methods/18
Поясните пожалуйста, почему в данном примере если все оставить как есть, то напечатается два раза "0.0.0.0",
package main
import "fmt"
type IPAddr [4]byte
func (v IPAddr) String() string {
return "0.0.0.0"
}
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)
}
}
https://ideone.com/lIeMk8
если же заменить сигнатуру на
func (v *IPAddr) String() string
то будет вызван иной метод преобразования и напечатаются реальные значения.
Допустим fmt.Printf ищет interface Stringer, но в интерфейсе не указывается указатель ли это или нет.
Опять же, согласно этому примеру
https://go.dev/tour/methods/7 GO сам берет указатель если сильно надо и наоборот.
Спасибо!
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.