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

為什麼reflect.MakeSlice傳回不可尋址的值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-10 12:58:14726瀏覽

Why does reflect.MakeSlice return an un-addressable value?

為什麼reflect.MakeSlice回傳不可定址的值?

使用反射取得切片指標

使用下列方法擷取指向切片的指標反射,利用reflect.New():

my := &My{}
myType := reflect.TypeOf(my)
slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10)
x := reflect.New(slice.Type())
x.Elem().Set(slice)

記得使用x.Interface()以防止將Reflect.Value 而不是實際值傳遞給函數。

了解 Reflect.MakeSlice 中的不可尋址性

可尋址值確保其位址指向一個有意義的位置。在函數內的堆疊上進行的分配不能保證這一點,因此它們是不可尋址的。

reflect.MakeSlice 將值分配給堆上的本地切片,而不將它們作為數組、結構體或解引用指標的元素進行尋址。因此,它傳回一個不可尋址的值。

為什麼需要切片指針?

通常,在像 mgo 的 iter.All 這樣的函數中,指標是必需的,因為切片經常被附加到。追加會更改切片的記憶體位址,需要將其傳達給呼叫者。

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

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