我不知道我该如何构建这个示例代码,以帮助避免空指针引用恐慌:如何避免“无效的内存地址或空指针取消引用”错误?
package main
import "fmt"
type Astruct struct {
Number int
Letter string
}
type Bstruct struct {
foo int
AStructList *[]Astruct
}
type Cstruct struct {
Bstruct
}
func (a *Astruct) String() string {
return fmt.Sprintf("Number = %d, Letter = %s", a.Number, a.Letter)
}
func main() {
astructlist := make([]Astruct, 3) // line 1
for i := range astructlist { // line 2
astructlist[i] = Astruct{i, "a"} // line 3
} // line 4
c := new(Cstruct)
c.Bstruct = Bstruct{100, &astructlist} // line 6
for _, x := range(*c.Bstruct.AStructList) {
fmt.Printf("%s\n", &x)
}
}
如果我省略1-4行和主()6,我得到一个空指针引用恐慌。检查c!= nil是否有办法避免这些恐慌?
在此先感谢您的帮助!
你的问题不是'c'是一个零指针,而是'c.Bstruct.AStructList'是一个零指针 – newacct 2012-02-27 23:13:52
是的。我明白错误来自哪里,但是我想知道的(也许在原始问题中没有说清楚)是“是否有更好/更习惯的方法来避免这个问题?”我花了一些时间看代码,并且认为必须有更好的方法来构造结构,以避免遇到零指针问题。 – mtw 2012-02-27 23:25:50