Go 如何使用反射获取切片数据? 主程序包 进口( “fmt” “反映” ) //AuthRequest结构 类型AuthRequest结构{ Id int64 } func main(){ //AuthRequestAuth1 auth1:=AuthRequest{ Id:1111, } //AuthRequestAuth2 auth2:=AuthRequest{ 身份证号码:2222, } //创建切片 var sliceModel=make([]AuthRequest,0) //将元素放入切片 sliceModel=append(sliceModel,auth1) sliceModel=append(sliceModel,auth2) //指向数组的指针 模型:=&切片模型 //如何在此处获取struct Id字段? v:=reflect.ValueOf(model).Elem() 对于j:=0;j

Go 如何使用反射获取切片数据? 主程序包 进口( “fmt” “反映” ) //AuthRequest结构 类型AuthRequest结构{ Id int64 } func main(){ //AuthRequestAuth1 auth1:=AuthRequest{ Id:1111, } //AuthRequestAuth2 auth2:=AuthRequest{ 身份证号码:2222, } //创建切片 var sliceModel=make([]AuthRequest,0) //将元素放入切片 sliceModel=append(sliceModel,auth1) sliceModel=append(sliceModel,auth2) //指向数组的指针 模型:=&切片模型 //如何在此处获取struct Id字段? v:=reflect.ValueOf(model).Elem() 对于j:=0;j,go,Go,当我执行上述代码时,我得到以下错误 恐慌:反射:对切片值[已恢复]调用reflect.Value.NumField 如何使用反射遍历切片以获取struct AuthRequest中Id字段的值?来源: NumField返回结构v中的字段数。如果v的种类不是Struct,它就会恐慌 由于您的输入是一个片,而不是一个结构,NumField应该是死机 你可能需要这个方法 package main import ( "fmt" "reflect" ) //AuthRequest st

当我执行上述代码时,我得到以下错误

恐慌:反射:对切片值[已恢复]调用reflect.Value.NumField

如何使用反射遍历切片以获取struct AuthRequest中Id字段的值?

来源:

NumField返回结构v中的字段数。如果v的种类不是Struct,它就会恐慌

由于您的输入是一个片,而不是一个结构,
NumField
应该是死机

你可能需要这个方法

package main

import (
    "fmt"
    "reflect"
)

//AuthRequest struct
type AuthRequest struct {
    Id int64
}

func main() {
    //AuthRequest auth1
    auth1 := AuthRequest{
        Id : 1111,
    }
    //Authrequest auth2
    auth2 := AuthRequest{
        Id : 2222,
    }

    //create slice
    var sliceModel = make([]AuthRequest, 0)

    //put element to slice
    sliceModel = append(sliceModel, auth1)
    sliceModel = append(sliceModel, auth2)

    //Pointer to an array
    model := &sliceModel

    //How do I get the struct Id field here?
    v := reflect.ValueOf(model).Elem()
    for j := 0; j < v.NumField(); j++ {
        f := v.Field(j)
        n := v.Type().Field(j).Name
        t := f.Type().Name()
        fmt.Printf("Name: %s  Kind: %s  Type: %s\n", n, f.Kind(), t)
    }
}