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

标签 arrays go struct slice

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

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

请注意,不能使用 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/

相关文章:

java - 我有一个包含 3 列和 7 行的文件,我需要从文件中的每一列中创建 3 个数组

go - 使用for循环遍历 channel 时出现Goroutine死锁

http - 如何在 go lang 的 Http Response 中打印一个 Struct

c - 如何在 C 中退出后返回变量

c - 用 C 将结构写入文件

c++ - 你将如何重写这个结构体指针?

c - double 到 char* 无需任何外部方法

php - 如何改进我的 php 添加脚本?

go - 编码为 CSV,然后在 golang 中 ZIP

java - 查找具有最佳优化时间复杂度的数组中最常出现的数字的总和