作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 Go 中有以下内容:
checkItemState := action.Data.CheckItem.State
if checkItemState != "" {
fmt.Printf("checklist item state: %s", action.Data.CheckItem.State)
}
现在,如果链 action.Data.CheckItem
中的任何项为 nil/空,我将收到 nil 指针取消引用错误,这是有道理的。
但是否有一种语言级别的方法来获取 checkItemState
(如果不是 nil)或 ""
(如果链中的任何项目为 nil/空)。
(我来自虚无主义传播的 Obj-C/Swift 土地)
最佳答案
如果您编写一些 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 实现。
关于go - 有没有办法在链式调用中传播变量的 "nilness"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122034/
我是一名优秀的程序员,十分优秀!