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中文网其他相关文章!