Go中的嵌套数组结构

我已经开始使用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)

}

以上是 Go中的嵌套数组结构 的全部内容, 来源链接: utcz.com/qa/415674.html

回到顶部