我有一个嵌套(非嵌入)结构,其中一些字段类型是数组。
如何检查此结构的实例是否为空? (不使用迭代!!)
请注意,不能使用 StructIns == (Struct{})
或空实例!此代码有以下错误:
无效操作:user == model.User 文字(包含 model.Configs 的结构无法比较)
用户.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"`
}
最佳答案
这些是 slices ,不是arrays 。需要强调的是,数组是可比较的,但 slice 则不然。请参阅Spec: Comparision operators 。并且由于 slice 不具有可比性,因此由它们组成的结构体(具有 slice 类型的字段的结构体)也不具有可比性。
您可以使用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
关于arrays - 检查具有数组字段的空结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45705921/