使用下列方法擷取指向切片的指標反射,利用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 將值分配給堆上的本地切片,而不將它們作為數組、結構體或解引用指標的元素進行尋址。因此,它傳回一個不可尋址的值。
通常,在像 mgo 的 iter.All 這樣的函數中,指標是必需的,因為切片經常被附加到。追加會更改切片的記憶體位址,需要將其傳達給呼叫者。
以上是為什麼reflect.MakeSlice傳回不可尋址的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!