我有一个嵌套(非嵌入式)结构,其中一些字段类型是数组。
如何检查此结构的实例是否为空? (不使用迭代!!)
请注意,不能使用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 :(得分: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