如果打印功能接收到空接口,那么golang如何打印任何类型的值?

时间:2019-03-29 12:38:25

标签: go

Golang fmt.Println()函数应该接收...interface{}类型的参数。使用接口,我们只能通过其值与下位值进行交互,这意味着即使有值,也无法直接访问值的字段。但是空接口不会实现任何方法,因此,如果我们尝试定义如下函数:

func test(i interface{}) {
    i.M()
}

我们会收到错误消息-i.M undefined (type interface {} is interface with no methods) 我以为golang依赖于一些默认类型的方法,但是正如我所看到的,没有像方法继承这样的东西:

type F1 float64

func (f F1) M() {
    fmt.Println(f)
}

type F2 F1

func main() {
    var i interface{}
    var j F1 = 42.42
    j.M() // OK

    var k F2 = 42.42
    k.M() // NO WAY!

    i = j
    i.M() // Also fails -- i.M undefined 
}

因此,fmt.Println的工作原理是: 1.我们只能通过方法与接口下的值进行交互 2.我们无法从空接口调用任何方法,但是fmt.Println会接收到空方法。

0 个答案:

没有答案