当前位置: 首页 > 面试题库 >

Go中的嵌套数组结构

韩志专
2023-03-14
问题内容

我已经开始使用https://mholt.github.io/json-to-go/将API JSON转换为go结构,但我真的很喜欢它,但是我仍然坚持如何在Report
Definition结构中初始化Filters数组结构如下所示。

type ReportDefinition struct {
    ReportName string `json:"reportName"`
    ReportType string `json:"reportType"`
    Product    string `json:"product"`
    Email      string `json:"email"`
    CreatedBy  string `json:"createdBy"`
    Duration   struct {
        Duration  string      `json:"duration"`
        StartDate interface{} `json:"startDate"`
        EndDate   interface{} `json:"endDate"`
    } `json:"duration"`
    Filters []struct {
        Column struct {
            ColumnName string `json:"columnName"`
            Value      string `json:"value"`
        } `json:"column"`
        Operator string `json:"operator"`
    } `json:"filters"`
    SortBy            interface{}   `json:"sortBy"`
    ReportGroup       interface{}   `json:"reportGroup"`
    ReportOnHierarchy bool          `json:"reportOnHierarchy"`
    IsReportPreview   string        `json:"isReportPreview"`
    OutputRecordCount interface{}   `json:"outputRecordCount"`
    Schedule          interface{}   `json:"schedule"`
    Columns           []interface{} `json:"columns"`
}

我似乎无法引用在Filters结构甚至是Filters结构中声明的项,以创建新的Filter项目并将其附加到Filters。

是否可以使用原样编写的ReportDefinition引用Column结构?还是我在做一些愚蠢的事情,我应该在ReportDefinition结构之外声明Filters?


问题答案:

由于“过滤器”字段中的切片类型没有名称,因此在初始化时必须重复定义

package main

import "fmt"

type ReportDefinition struct {
    Filters []struct {
            Column struct {
                    ColumnName string `json:"columnName"`
                    Value      string `json:"value"`
            } `json:"column"`
            Operator string `json:"operator"`
    } `json:"filters"`
}

func main() {
    var rd ReportDefinition
    rd.Filters = append(rd.Filters, struct {
            Column struct {
                    ColumnName string `json:"columnName"`
                    Value      string `json:"value"`
            } `json:"column"`
            Operator string `json:"operator"`
    }{
            Column: struct {
                    ColumnName string `json:"columnName"`
                    Value      string `json:"value"`
            }{
                    ColumnName: "foo",
                    Value:      "bar",
            },
            Operator: "==",
    })

    fmt.Printf("+%v\n", rd)
}

应当清楚的是,这非常不方便,因此您应该给类型名称(至少要初始化的名称):

package main

import "fmt"

type ReportDefinition struct {
    Filters []Filter `json:"filters"`
}

type Filter struct {
    Column   Column `json:"column"`
    Operator string `json:"operator"`
}

func NewFilter(col, op, val string) Filter {
    return Filter{
            Column: Column{
                    ColumnName: col,
                    Value:      val,
            },
            Operator: op,
    }
}

type Column struct {
    ColumnName string `json:"columnName"`
    Value      string `json:"value"`
}

func main() {
    var rd ReportDefinition
    rd.Filters = append(rd.Filters, NewFilter("foo", "==", "bar"))

    fmt.Printf("+%v\n", rd)
}


 类似资料:
  • 问题内容: 嗨,我在解组嵌套的JSON数组时遇到问题。我应该创建什么结构?我想避免使用尽可能多的东西,但是我真的不知道在这种情况下是否有可能。 杰森,我想解组: 和我想用来解组的结构: 链接到示例:https : //play.golang.org/p/owuMptNrix 问题答案: 是的,答案只是一小部分: 好感谢你的问题,我发现这个错误的工具,我总是用它的Json操作一起去,它可以为你节省很

  • 语言 go 写了一个嵌套数组 想要构造出一个能够添加一个结构体的函数 这是运行的结果 想要知道 nil为什么没变 为什么不是80

  • 问题内容: http://play.golang.org/p/f6ilWnWTjm 我正在尝试解码以下字符串,但仅获取空值。 如何在Go中解码嵌套的JSON结构? 我想将以下内容转换为地图数据结构。 问题答案: 在Go中使用嵌套结构来匹配JSON中的嵌套结构。 这是一个如何处理示例JSON的示例: 游乐场链接 您还可以对内部结构使用匿名类型: 游乐场链接 或外部和内部结构: 游乐场链接 如果您不知

  • 本文向大家介绍C ++中的数组嵌套,包括了C ++中的数组嵌套的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个长度为N的零索引数组A,其中包含从0到N-1的所有整数。我们必须找到并返回集合S的最长长度,其中S [i] = {A [i],A [A [i]],A [A [A [i []]],...}以下规则。现在考虑S中的第一个元素以索引= i的元素A [i]的选择开始,S中的下一个元素应为A

  • 问题内容: 嗨,我是Golang的新手,请帮助我。我已经在结构内部定义了一个结构。但是,当我尝试初始化主结构时出现错误。 我得到的错误是:不能在字段值中使用(类型接口{})作为类型结构:需要类型声明。 请提出一种初始化DetailsFilter的方法。我尝试执行在Golang中初始化嵌套结构中描述的方法,但即使这样也不起作用。 问题答案: 不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只

  • 问题内容: 在我正在处理的集合中,文档如下所示: 我写了这个Mongoose模式来访问它: 当我查询文档时,一切正常,控制台中显示的输出正确。但是当我尝试执行console.log(myDoc.stuff)时,得到了以下信息: 代替 我究竟做错了什么?谢谢您的帮助!! 问题答案: 免责声明:此回复的日期过早,2012年!这可能不是最准确的。 从猫鼬的文档。 http://mongoosejs.co