【发布时间】:2019-10-28 11:40:15
【问题描述】:
我的目标是声明一个空的二维数组,然后在每次 do() 运行时对其进行初始化并填充值。问题是即使我正在初始化数组,我也会得到一个 nil 指针取消引用。
这是我试图在服务器模拟器上完成的一个简单版本。
package main
import "fmt"
type Srv struct {
A *[][]int
}
func (s Srv) init() {
arr := make([][]int, 0)
*s.A = arr
}
func main() {
s := Srv{nil}
s.init()
printSlice(*s.A)
do(s.A)
do(s.A)
}
func printSlice(s [][]int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
func do(s *[][]int) {
*s = append(*s, make([]int, 0))
printSlice(*s)
(*s)[0] = append((*s)[0], 5)
(*s)[0] = append((*s)[0], 6)
*s = append(*s, make([]int, 0))
printSlice(*s)
}
我希望得到类似 [ [5 6 5 6] [] [] [] ] 的输出,但我得到的是 nil 指针取消引用。
【问题讨论】:
-
s.A是nil,您不能取消引用nil。