为了账号安全,请及时绑定邮箱和手机立即绑定

它是一个空值结构 nil

它是一个空值结构 nil

Go
子衿沉夜 2021-08-16 20:12:15
看下面的代码片段。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))


查看完整回答
反对 回复 2021-08-16
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

value := &Empty{}


查看完整回答
反对 回复 2021-08-16
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信