我在 go 中有一个深度嵌套的结构。这些是由 json 解组器构建的。
然而,这个结构中的相当多的字段是“省略空的”,所以我以一个可以在不同地方有 nill 的结构结束 op。
示例(真实的嵌套更深,而且很大:400 行结构):
package main
import "fmt"
type Foo struct {
Foo string
Bar *Bar
}
type Bar struct {
Bar string
Baz *Baz
}
type Baz struct {
Baz string
}
func main() {
f1 := Foo{Foo: "f1"}
f2 := Foo{Foo: "f2", Bar: &Bar{Bar: "br2"}}
f3 := Foo{Foo: "f3", Bar: &Bar{Bar: "br3", Baz: &Baz{Baz: "bz3"}}}
fmt.Println(f3.Bar.Baz.Baz) //-> bz3
fmt.Println(f2.Bar.Baz.Baz) //-> panic: runtime error: invalid memory address or nil pointer dereference
fmt.Println(f1.Bar.Baz.Baz) //-> panic: runtime error: invalid memory address or nil pointer dereference
//so far so good, but
//is there a more generic way to do this kind of testing?
if f2.Bar != nil && f2.Bar.Baz != nil {
fmt.Println(f2.Bar.Baz.Baz)
} else {
fmt.Println("something nil")
}
}
问题是是否有更通用的方法来测试参考树中的某个节点是否为零?我需要获得很多不同的项目,编写所有这些 if 语句会很痛苦。哦,速度令人担忧。
侃侃无极
相关分类