gpt4 book ai didi

go - 为什么我的 Golang 定义的方法没有隐式实现而 String() 确实实现了

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:58 24 4
gpt4 key购买 nike

https://tour.golang.org/methods/11

它指出在底层,接口(interface)值可以被认为是一个值和一个具体类型的元组

我定义M如下

脚本1

package main

import (
"fmt"
)

type I interface {
M() string
}
type T struct {
S string
w string
}
func (t T) M() string {
return "dddd"
}
func main() {
var i I
i = T{"Hello","eeee"}
fmt.Printf("(%v, %T)", i, i)
fmt.Println(i)
}

这会打印出 ({Hello eee}, main.T){Hello eee}界面我有 vaule {Hello eee} 并输入 main.T

脚本2:

package main

import (
"fmt"
)

type I interface {
M() string
}
type T struct {
S string
w string
}
func (t T) M() string {
return "dddd"
}
func (t T) String() string {
return "ccccc"
}
func main() {
var i I
i = T{"Hello","eeee"}
fmt.Printf("(%v, %T)", i, i)
fmt.Println(i)
}

这会打印出 (ccccc, main.T)ccccc

接口(interface) i 有 vaule ccccc 和类型 main.T

似乎当我将 String() 添加为 script2 中的 fmt 包定义的 Stringer 时。 String() 是隐式实现的,不知道为什么?

我想在 script2 中我会有值“{Hello eee}”并输入 main.T

最佳答案

你应该调用 fmt.Println(i.M()) ?
为什么要 fmt 在函数不存在时调用它?

Stringer 是一种可以将自身描述为字符串的类型。 fmt 包(以及许多其他包)寻找这个接口(interface)来打印值

关于go - 为什么我的 Golang 定义的方法没有隐式实现而 String() 确实实现了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403430/

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