先看代码

	ret:=[][]int{}
	fmt.Println(ret)			// []
	
	ret=append(ret,[]int{1,2,3})
	ret[0]=append(ret[0],4,5,6)

	fmt.Println(ret)			//[1 2 3 4 5 6]
	ret:=[][]int{}
	fmt.Println(ret)
	
	ret[0]=append(ret[0],4,5,6)		//报错因为这种初始化方式ret[0]不存在
	ret=append(ret,[]int{1,2,3})
	fmt.Println(ret)				
}
	ret:=make([][]int, 2)
	fmt.Println(ret)				//[[] []]
	
	ret[0]=append(ret[0],4,5,6)		
	ret=append(ret,[]int{1,2,3})
	fmt.Println(ret)				//[[4 5 6] [] [1 2 3]]
}

这种初始化方式给二维切片先赋了2个空一维数组。所以不会报错