檢查reflect.Kind()切片的 時,如果未存儲在指針內,reflect則正確將其識別為 a :slicepackage mainimport ( "fmt" "reflect")type Dog struct { Name string Age int}func main() { var dogs []Dog rDogs := reflect.ValueOf(dogs) fmt.Println(rDogs.Kind())}輸出:slice但是,當切片存儲在指針內時,reflect.Kind()將其標識為struct:package mainimport ( "fmt" "reflect")type Dog struct { Name string Age int}func main() { dogs1 := make([]Dog, 0) pointer := &dogs1 printPointerValueKind(pointer) var dogs2 []Dog pointer = &dogs2 printPointerValueKind(pointer)}func printPointerValueKind(pointer interface{}) { if pointer != nil { rPointer := reflect.ValueOf(pointer) if rPointer.Kind() == reflect.Ptr { value := rPointer.Elem() rValue := reflect.ValueOf(value) fmt.Println(rValue.Kind()) } }} 輸出:structstruct我的問題是:為什么會出現這種情況?有沒有一種方法可以將切片存儲在指針內,并且仍然將reflect.Kind()其標識為 a slice?
1 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
1?.?(reflect.Value).Elem()
返回 a?reflect.Value
,它是一個結構體,如果您正在查找該值所持有的類型,則不需要再次傳遞給它。reflect.ValueOf
2?.?rPointer.Elem().Kind()
應該足以滿足你的需要。
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消