美文网首页
golang 中值为 nil 能调用函数吗?

golang 中值为 nil 能调用函数吗?

作者: 追风骚年 | 来源:发表于2021-12-27 13:17 被阅读0次

看过煎鱼的推文,我做了如下测试:

package main

import "fmt"

type T struct{}

func (t *T) Hello() string {
    if t == nil {
        return "111"
    }
    return "222"
}

func main() {
    var t1 *T
    var t2 T

    fmt.Println(t1.Hello())
    fmt.Println(t2.Hello())
}

到底有打印,还是会 panic?
这道题和煎鱼的题异曲同工,结果也显而易见。
不会发生 panic,会依次打印 111222
原因就在于 t1 *T 的声明,t1 的 value 为 nil,type 为 T 类型的指针; t2 T 的声明,t2 的 value 为 {},type 为 T 类型,t2.Hello() = (&t2).Hello(),当然也不会发生 panic;

参考文档

相关文章

  • golang 中值为 nil 能调用函数吗?

    看过煎鱼的推文,我做了如下测试: 到底有打印,还是会 panic?这道题和煎鱼的题异曲同工,结果也显而易见。不会发...

  • golang 不同类型的nil值

    golang 不同类型的nil值 nil通道 通道必须使用make函数进行初始化,对nil管道进行读写会导致永久阻...

  • golang中nil有趣转化

    nil 函数自动转化 函数形参:nil; 猜想测试 得出结论当调用函数时候,实参是nil,会自动转化成形式参数类型...

  • 可选链(Optional Chaining)

    如果可选项为nil,调用方法,下标,属性失败,结果为nil 如果可选项不为nil,调用方法,下标,属性成功,结果会...

  • golang中defer的使用

    在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函...

  • 14-Swift可选链、协议

    1.可选链 如果可选项为nil,调用方法、下标、属性失败,结果为nil 如果可选项不为nil,调用方法、下标、属性...

  • 007. From C++ to objective-C

    -表示常规方法,+表示静态方法 指针对象调用函数:当ptr为nil时,OC可以忽略这次调用(C++可能会抛出异常)...

  • NULL、nil、Nil 和NSNULL

    转:nil、Nil、NULL和NSNull区别NULL、nil、Nil这三者对于Objective-C中值是一样的...

  • iOS-Swift-可选链、协议

    一. 可选链(Optional Chaining) 如果可选项为nil,调用方法、下标、属性失败,结果为nil如果...

  • 可选链

    可选链(Optional Chaining) 如果可选项为nil,调用方法、下标、属性失败,结果为nil 如果可选...

网友评论

      本文标题:golang 中值为 nil 能调用函数吗?

      本文链接:https://www.haomeiwen.com/subject/ybryqrtx.html