栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将nil接口转换为Golang中某物的指针?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将nil接口转换为Golang中某物的指针?

这是因为 静态 类型的变量

Nexter
(只是一个接口)可能包含许多不同 动态 类型的值。

是的,因为

*Node
工具
Nexter
,您的
p
变量 可能 持有类型的值
*Node
,但它可以容纳 其他类型 以及其实施
Nexter
;
或者它可能持有 什么
都(
nil
值)。而且类型断言不能在这里使用,因为引用了规范:

x.(T)
断言
x
nil
和存储在值
x
是类型的
T

但是

x
你的情况是
nil
。如果类型断言为假, 则会发生运行时恐慌

如果您更改程序以使用以下方法初始化

p
变量:

var p Nexter = (*Node)(nil)

您的程序将运行,并且类型声明成功。这是因为接口值实际上以以下形式持有一对:

(value, dynamictype)
,在这种情况下,您
p
将不是
nil
,但将持有一对
(nil,*Node)
;有关详细信息,请参见反射定律#接口的表示。

如果您还想处理

nil
接口类型的值,则可以像下面这样显式检查它:

if p != nil {    n = p.(*Node) // will not fail IF p really contains a value of type *Node}

或者更好:使用特殊的“逗号分隔”形式:

// This will never fail:if n, ok := p.(*Node); ok {    fmt.Printf("n=%#vn", n)}

使用“逗号分隔”形式:

如果断言成立,

ok
则值为
true
。否则,它是
false
和值
n
是类型的零值
T
在这种情况下,不会发生运行时恐慌。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436229.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号