為什麼reflect.MakeSlice返回不可尋址的值
在Go中,reflect包提供了一個介面來檢查和操作類型和值。 Reflect.MakeSlice 建立給定類型的切片。但是,傳回值是不可尋址的。這表示您無法取得其位址或將其指派給指標。
解決方案:使用reflect.New()
要使用反射獲取可尋址切片,您可以使用reflect.New()函數建立指向切片的指針。這可以如下完成:
// Create the slice type sliceType := reflect.SliceOf(SomeType) // Create a slice using reflect.MakeSlice slice := reflect.MakeSlice(sliceType, 10, 10) // Create a pointer to the slice slicePtr := reflect.New(slice.Type()) // Set the slice pointer to the slice slicePtr.Elem().Set(slice)
現在,您有一個可尋址切片,可以將其作為參數傳遞給需要切片指標的函數。
為什麼反射。 MakeSlice 傳回不可尋址的值
Go 中的本地堆疊變數是不可尋址的,因為運行時可能會將它們移到隨時堆疊。 Reflect.MakeSlice 建立一個本地切片變量,這就是為什麼傳回值是不可尋址的。
為什麼需要指向切片的指標
一些 API,例如正如您在 mgo 套件中提到的那樣,需要一個指向切片的指標作為參數。這是因為當追加到切片時,可能會分配容量增加的新切片。如果傳遞非指標切片,則對切片所做的變更在函數外部將不可見。
以上是為什麼「reflect.MakeSlice」函數傳回不可尋址的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!