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

转到类型断言 nil 到指针类型

转到类型断言 nil 到指针类型

Go
拉莫斯之舞 2021-11-01 16:44:03
为什么我不能对指针类型断言 nil?这背后的逻辑是什么?package mainfunc main() {    var s interface{} = nil    var p *string = nil    var q *string = s.(*string)    _ = q    _ = p}
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

你不能输入断言没有类型的东西。

变量的静态类型(或只是类型)是其声明中给出的类型、新调用或复合文字中提供的类型,或者结构化变量的元素类型。接口类型的变量也有一个独特的动态类型,它是在运行时分配给变量的值的具体类型(除非该值是预先声明的标识符 nil,它没有类型)。动态类型在执行期间可能会有所不同,但存储在接口变量中的值始终可以分配给变量的静态类型。

直接来自规范(强调我的)

接口知道底层值的类型。例如,如果我有一个带有 a 的接口,type MyType它也不能被类型断言*string。你也许可以通过一些工作来转换它的类型,但是类型断言和类型转换是不同的。

也看看这里

对于接口类型的表达式 x 和类型 T,主要表达式

x.(T)

断言 x 不是 nil并且存储在 x 中的值是 T 类型。符号 x.(T)


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

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