gpt4 book ai didi

go - IPAddr 类型的字符串方法

转载 作者:行者123 更新时间:2023-12-01 21:17:22 25 4
gpt4 key购买 nike

package main

import (
"fmt"
"strings"
)

type IPAddr [4]byte

func (ip IPAddr) String() string {
return strings.Trim(strings.Join(strings.Fields(fmt.Sprint([4]byte(ip))), "."), "[]")
}

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)
}
}

问题 1:我没有看到对 String() 的任何调用 type IPAddr 的方法但它仍然被调用。为什么?
Q 2:为什么方法名必须是 String()而不是 Stringa() , Stringb() ?

最佳答案

  • Stringer Interface
  • type Stringer interface {
    String() string
    }

    Stringer is implemented by any value that has a String method, which defines the “native” format for that value. The String method is used to print values passed as an operand to any format that accepts a string or to an unformatted printer such as Print.


    所以当你定义一个 String类型的方法并将该类型的实例传递给 fmt.Printf和 friend 然后将其转换为 type interface{} 的值您也可以从函数签名中看到。然后在 fmt包,它会检查 String定义类型的方法(意味着它实现了 Stringer 接口(interface))并调用它。
    因此,我建议您首先阅读有关接口(interface)的信息。

    关于go - IPAddr 类型的字符串方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63912812/

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