看下面的代码片段。package mainimport "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如何检查值结构类型是否为空?
3 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
指针、切片、通道、接口和映射是唯一可以与 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
TA贡献1834条经验 获得超8个赞
它是一个值类型,如int
,因此它不能为 nil。只有指针和接口类型可以为零。如果要允许 nil 值,请将其设为指针:
value := &Empty{}
- 3 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消