Мне интересно, как я могу структурировать этот пример кода, чтобы избежать паники разыменования нулевого указателя:
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 функции main (), я получаю панику разыменования нулевого указателя. Если не считать проверки c! = Nil, есть ли способ избежать этой паники?
Заранее спасибо за любую помощь!