我在Go中有以下内容:
checkItemState := action.Data.CheckItem.State
if checkItemState != "" {
fmt.Printf("checklist item state: %s", action.Data.CheckItem.State)
}
现在,如果链action.Data.CheckItem
中的任何项都是nil / empty,我会得到一个nil指针解引用错误,这是有道理的。
但是,如果不是nil,是否有语言级别获取checkItemState
,或者如果链中的任何项目为nil / empty,则有""
。
(我来自Obj-C / Swift土地,在那里传播的是nilness)
答案 0 :(得分:5)
如果编写一些getter,你可以很好地处理这个问题。 Go方法接收器只是常规函数参数,因此在nil接收器上调用某些东西是完全可以的:
type Foo struct {
Name string
}
func (f *Foo) GetName() string {
if f == nil {
return "default name" // or "", whatever
}
return f.Name
}
https://play.golang.org/p/Q20lSo65Kx
这个技巧用于例如通过Go protobuf实现。