2017-08-16 82 views
1

我有一个嵌套的(不嵌入的)结构,其中一些字段类型是数组。检查具有数组字段的空结构

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

请注意,不能使用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"` 
} 
+0

迭代是唯一的可能性。 – Flimzy

回答

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 
+0

我已经使用了一个名为deep或者deep的包,它有一个类似于reflect.DeepEqual()的方法,它也标识了第一个不相等的组件。 –