为了账号安全,请及时绑定邮箱和手机立即绑定

IPAddr 类型的字符串方法

IPAddr 类型的字符串方法

Go
至尊宝的传说 2022-06-27 17:14:13
package mainimport (    "fmt"    "strings")type IPAddr [4]bytefunc (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)    }}Q 1:我没有看到对String()方法的任何调用,type IPAddr但它仍然被调用。为什么?Q 2:为什么方法的名称必须是String()而不是Stringa(),Stringb()?
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

type Stringer interface {
    String() string}

Stringer 由任何具有 String 方法的值实现,该方法定义了该值的“本机”格式。String 方法用于将作为操作数传递的值打印到任何接受字符串的格式或未格式化的打印机(例如 Print)。

因此,当您为该类型定义一个String方法并将该类型的实例传递给fmt.Printf和朋友时,它也会转换为type interface{}您可以从函数签名中看到的值。然后在fmt包中,它检查String该类型的方法是否已定义(意味着它实现了 Stringer 接口)并调用它。

因此,我建议您首先阅读有关接口的信息。


查看完整回答
反对 回复 2022-06-27
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

  1. string 方法是 stringer 接口包的一部分 fmt 查找传递的值以检查输入是否实现了 Stringer 接口,如果实现了,它将在打印时自动调用 stringer 函数

  2. 由于它基于特定的接口,因此如果它不实现特定的签名,则需要调用固定的方法签名,因此 fmt 包将不会调用字符串方法

你可以在这里阅读更多内容 https://golang.org/pkg/fmt/#Stringer


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信