Go判断结构体是否存在时报错Cannot convert 'nil' to type 'Image'如何解决
错误原因
Company结构体中定义的Image字段是值类型的结构体,Go语言中仅指针、接口、切片、映射、通道、函数类型支持与nil比较,值类型结构体永远不可能为nil,因此对比时会报类型不匹配错误。
解决方案
方案1:修改Image为指针类型(最适配现有逻辑)
直接调整Company结构体的Image字段为指针类型,即可直接用nil判断是否被赋值,同时也适配omitempty序列化标签的逻辑:
type Company struct { Name string `json:"name" bson:"name,omitempty"` // 将Image改为*Image指针类型 Image *Image `json:"image" bson:"image,omitempty"` } type Image struct { ID string `json:"id" bson:"id,omitempty"` Name string `json:"name" bson:"name,omitempty"` } func checkCompanyCredibility(companies []Company) int{ rating := 0 for _, company := range companies{ if company.Image != nil { // 注意原代码的笔误:=+是赋值为3,累加需要用+= rating += 3 break } } return rating }
方案2:不改结构体定义,判断Image的零值
如果无法修改结构体字段类型,可通过判断Image结构体的业务字段是否为零值来确认是否有效,比如判断ID是否为空:
func checkCompanyCredibility(companies []Company) int{ rating := 0 for _, company := range companies{ // 可根据业务需求补充判断Name字段的条件 if company.Image.ID != "" { rating += 3 break } } return rating }
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

