在Go 中將Null 介面轉換為指標
在Go 中,將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) // prints true n = p.(*Node) // fails }
這會失敗,因為靜態介面(Nexter)可以保存不同動態類型的值,包括 nil。類型斷言 (p.(*Node)) 不能對 nil 介面值執行。
但是,可以直接將 nil 值指派給特定類型的指標:
n = (*Node)(nil)
這會將動態類型 *Node 的 nil 值指派給 n。
要處理nil 介面值,您可以檢查它們明確地:
if p != nil { n = p.(*Node) // only succeeds if p contains a value of type *Node }
或者,使用「comma-ok」形式:
if n, ok := p.(*Node); ok { // n is not nil and holds a value of type *Node }
使用「 comma-ok」形式確保斷言永遠不會失敗並傳回一個布林值,指示斷言是否成立而不是引起恐慌。這使您可以安全地處理 nil 和非 nil 介面值。
以上是如何在 Go 中安全地將 Nil 介面轉換為指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!