首頁 >後端開發 >Golang >為什麼 `reflect.MakeSlice` 在 Go 中傳回不可尋址的值?

為什麼 `reflect.MakeSlice` 在 Go 中傳回不可尋址的值?

Patricia Arquette
Patricia Arquette原創
2024-11-07 21:56:03988瀏覽

Why Does `reflect.MakeSlice` Return an Un-addressable Value in Go?

為什麼在Go中reflect.MakeSlice會傳回不可尋址的值

問題概述

在Go中,使用reflect.MakeSlice建立切片會傳回一個不可尋址的值。當需要切片位址時,這會成為一個問題,如以下程式碼片段所示:

使用反射來取得指向切片的指標

要解決此問題,有兩種方法解決方案:

1.使用reflect.New()

最簡單的解決方案是使用reflect.New() 建立一個指標。例如:

2。使用類型化映射

或者,您可以使用類型化映射來建立所需類型的切片:

為什麼reflect.MakeSlice 傳回無法定址的值

本地堆疊變量,包括由reflect.MakeSlice建立的變量,在Go中是不可尋址的。這確保了指向這些變數的指標保持有意義,並且不會指向無效的記憶體位置。

為什麼需要指向切片的指標

mgo API 需要一個指向切片的指標作為其 iter .All 函數,因為附加到切片可能會重新分配記憶體。為了將這些變更傳達給呼叫者,需要一個指標。

以上是為什麼 `reflect.MakeSlice` 在 Go 中傳回不可尋址的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn