Go 它是一个空值结构nil

Go 它是一个空值结构nil,go,Go,请看下面的代码片段 package main import "fmt" type Empty struct { Field1, Field2 string } func main() { value := Empty{} fmt.Println(value == nil) fmt.Printf("%p", &value) } 我有一个编译器错误 ./empty_struct.go:19: cannot convert nil to type

请看下面的代码片段

package main

import "fmt"

type Empty struct {
    Field1, Field2 string
}

func main() {

    value := Empty{}

    fmt.Println(value == nil)
    fmt.Printf("%p", &value)

}
我有一个编译器错误

./empty_struct.go:19: cannot convert nil to type Empty

如果值结构类型为空或非空,如何检查它?

它是一种值类型,与
int
类似,因此不能为零。只有指针和接口类型可以为nil。如果要允许nil值,请将其设为指针:

value := &Empty{}

指针、切片、通道、接口和映射是唯一可以与nil进行比较的类型。结构值不能与nil进行比较

如果结构中的所有字段都具有可比性(如示例中所示),则可以与结构的已知零值进行比较:

 fmt.Println(value == Empty{})
如果结构包含不可比较的字段(切片、贴图、通道),则需要编写代码检查每个字段:

 func IsAllZero(v someStructType) bool {
     return v.intField == 0 && v.stringField == "" && v.sliceField == nil
 }
 ...
 fmt.Println(isAllZero(value))
您可以定义结构的“nil”值,例如:

var nilEmpty = Empty{}
fmt.Println(value == nilEmpty)
nil
只能用于指针类型(切片、通道、接口和映射)

请记住,如果在结构中有切片或任何不可比较的值,那么结构相等并不总是有效的,您必须使用

发件人:

如果结构值的所有字段都具有可比性,则结构值具有可比性。如果两个结构值对应的非空字段相等,则两个结构值相等