繁体   English   中英

如何使用 go 中的反射从结构子字段中获取项目数

[英]How to get the number of items from a structure sub field using reflect in go

通过reflect package 从切片结构中的子字段获取项目数时遇到一些问题。

这就是我试图从Items中获取项目数量的方式

func main() {

  type Items struct {
      Name    string `json:"name"`
      Present bool   `json:"present"`
  }

  type someStuff struct {
      Fields string     `json:"fields"`
      Items    []Items `json:"items"`
  }

  type Stuff struct {
      Stuff []someStuff `json:"stuff"`
  }

  some_stuff := `{
                  "stuff": [
                     {
                       "fields": "example",
                       "items": [
                         { "name": "book01", "present": true },
                         { "name": "book02", "present": true },
                         { "name": "book03", "present": true }                                        
                       ]
                     }
                   ]
                }`

  var variable Stuff

  err := json.Unmarshal([]byte(some_stuff), &variable)
  if err != nil {
      panic(err)
  }

  //I want to get the number of items in my case 3
  NumItems := reflect.ValueOf(variable.Stuff.Items)

}

这是错误:

variable.Items undefined (type []Stuff has no field or method Items)

我不确定我是否可以检索到这样的项目数量。

我已经解决了这个问题。

为了获得子字段的数量,我们可以使用reflect.ValueOf中的Len()

现在的代码正在获取项目的数量:

package main

import (
    "encoding/json"
    "fmt"
    "reflect"
)

func main() {

    type Items struct {
        Name    string `json:"name"`
        Present bool   `json:"present"`
    }

    type someStuff struct {
        Fields string  `json:"fields"`
        Items  []Items `json:"items"`
    }

    type Stuff struct {
        Stuff []someStuff `json:"stuff"`
    }

    some_stuff := `{
                  "stuff": [
                     {
                       "fields": "example",
                       "items": [
                         { "name": "book01", "present": true },
                         { "name": "book02", "present": true },
                         { "name": "book03", "present": true }                                        
                       ]
                     }
                   ]
                }`

    var variable Stuff

    err := json.Unmarshal([]byte(some_stuff), &variable)
    if err != nil {
        panic(err)
    }

    //I want to get the number of items in my case 3
    t := reflect.ValueOf(variable.Stuff[0].Items)
    fmt.Println(t.Len())

}

Output: 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM