检查具有数组字段的空结构

时间:2017-08-16 05:49:04

标签: arrays go struct

我有一个嵌套(非嵌入式)结构,其中一些字段类型是数组。

如何检查此结构的实例是否为空? (不使用迭代!!)

请注意,不能使用StructIns == (Struct{})或空实例!此代码有此错误:

invalid operation: user == model.User literal (struct containing model.Configs cannot be compared)

user.Configs.TspConfigs:

type TspConfigs struct {
    Flights     []Flights   `form:"flights" json:"flights"`
    Tours       []Tours     `form:"tours" json:"tours"`
    Insurances  []Insurances`form:"insurances" json:"insurances"`
    Hotels      []Hotels    `form:"hotels" json:"hotels"`
}

1 个答案:

答案 0 :(得分:2)

这些是slices,而不是arrays。重要的是要强调数组是可比较的,但切片不是。见Spec: Comparision operators。由于切片不具有可比性,因此由它们组成的结构(具有切片类型的字段的结构)也无法比较。

您可以使用reflect.DeepEqual()。例如:

type Foo struct {
    A []int
    B []string
}

f := Foo{}
fmt.Println("Zero:", reflect.DeepEqual(f, Foo{}))
f.A = []int{1}
fmt.Println("Zero:", reflect.DeepEqual(f, Foo{}))

输出(在Go Playground上尝试):

Zero: true
Zero: false