有没有办法传播" nilness"链式呼叫中的变量?

时间:2017-05-22 20:57:09

标签: go

我在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)

1 个答案:

答案 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实现。