它是一个空值结构 nil

看下面的代码片段。


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

如何检查值结构类型是否为空?


子衿沉夜
浏览 167回答 3
3回答

白猪掌柜的

指针、切片、通道、接口和映射是唯一可以与 nil 进行比较的类型。结构值不能与 nil 进行比较。如果结构中的所有字段都具有可比性(如您的示例中所示),那么您可以与结构的已知零值进行比较: fmt.Println(value == Empty{})如果结构体包含不可比较的字段(切片、映射、通道),则需要编写代码来检查每个字段: func IsAllZero(v someStructType) bool {     return v.intField == 0 && v.stringField == "" && v.sliceField == nil } ... fmt.Println(isAllZero(value))

MMMHUHU

它是一个值类型,如int,因此它不能为 nil。只有指针和接口类型可以为零。如果要允许 nil 值,请将其设为指针:value := &Empty{}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go