首页 > 后端开发 > Golang > 如何在 Go 中安全地将 Nil 接口转换为指针?

如何在 Go 中安全地将 Nil 接口转换为指针?

DDD
发布: 2024-12-19 14:01:16
原创
208 人浏览过

How to Safely Convert a Nil Interface to a Pointer in Go?

GoLang 中的 Nil 接口到指针转换错误

在 GoLang 中,尝试将 nil 接口转换为特定类型的指针,如下如下图所示,触发错误:

type Nexter interface {
    Next() Nexter
}

type Node struct {
    next Nexter
}

func (n *Node) Next() Nexter {...}

func main() {
    var p Nexter

    var n *Node
    fmt.Println(n == nil) // true
    n = p.(*Node) // error
}
登录后复制

发生此错误是因为静态类型变量接口类型(例如 Nexter)可以保存各种动态类型的值,包括 nil。虽然可以使用 (*Node)(nil) 将 nil 值转换为指针,但无法应用示例中使用的类型断言,因为:

x.(T)
登录后复制

要求 x 非 - nil 且类型为 T。在这种情况下,p 可能包含各种类型的值或 nil。

相反,可以进行显式检查就业:

if p != nil {
    n = p.(*Node) // succeeds if p contains a *Node value
}
登录后复制

或者,“comma-ok”形式提供了更安全的选择:

if n, ok := p.(*Node); ok {
    fmt.Printf("n=%#v\n", n)
}
登录后复制

使用“comma-ok”形式允许处理 nil 和 non- nil 接口值而不触发恐慌。

以上是如何在 Go 中安全地将 Nil 接口转换为指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板