Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";附加“;或;“复制”;在golang从一个切片到二维切片?_Go_Copy_Append_2d_Slice - Fatal编程技术网

如何";附加“;或;“复制”;在golang从一个切片到二维切片?

如何";附加“;或;“复制”;在golang从一个切片到二维切片?,go,copy,append,2d,slice,Go,Copy,Append,2d,Slice,我想将切片数据添加到二维切片: var a_slice []int var b_slice [][]int for i:=0; i<num; i++{ a_slice = some_function() b_slice = append(b_slice, a_slice) } 这不是我想要的。我想要[[1,1,1][2,2,2][3,3,3]] 我尝试了“复制”,但也没有得到解决方案。我记得“复制”功能可以进行深度复制。“append”函数还将分配新数据(而不是指针)存储以进行

我想将切片数据添加到二维切片:

var a_slice []int
var b_slice [][]int

for i:=0; i<num; i++{
a_slice = some_function()
b_slice = append(b_slice, a_slice) 
}   
这不是我想要的。我想要[[1,1,1][2,2,2][3,3,3]]

我尝试了“复制”,但也没有得到解决方案。我记得“复制”功能可以进行深度复制。“append”函数还将分配新数据(而不是指针)存储以进行深度复制。我尝试过(希望分配新内存并深度复制原始数据),但结果相同。
因此,我怀疑“append”和“copy”函数不能与2D切片一起工作? 为什么会发生这种情况?如何完成这项任务

(some_函数是fmt.Fscan。在原始代码中如下所示:

var a_slice = make([]int, 3)   
var iface_slice = make([]interface{}, 3)     
var b_slice=make([][]int, 3)      

for i:= range a_slice{    
    iface_slice[i] = &a_slice[i]    
}     
for i:=0; i<num; i++{     
    if _, err := fmt.Fscan(f, iface_slice...); err != nil{    
         return err 
    }else{
         b_slice = append(b_slice, a_slice) 
    } 
}
var a_slice=make([]int,3)
var iface_slice=make([]接口{},3)
var b_slice=make([]整型,3)
对于i:=范围a_切片{
iface\u slice[i]=&a\u slice[i]
}     

对于i:=0;i可能您正在变异
a_切片

尝试在循环中声明一个新的
a_slice
实例,这样你的函数就不会过度使用以前的实例

var b_slice [][]int

for i:=0; i<num; i++{
  var a_slice []int
  a_slice = some_function()
  b_slice = append(b_slice, a_slice) 
}   
var b_slice[]int

对于i:=0;i您应该显示
some\u函数的代码
。但是请记住,切片只是标题,您可能需要阅读“some\u函数”是fmt.Fscan。在原始代码中是这样的:那么你不是每次都给
a_slice
分配一个新值。相反,你覆盖了与添加到
b_slice
的其他切片描述符共享的内容。我建议你阅读我上面发布的链接。标记为replicate的问题解释了切片的缺点Structed,这就是你看到这种行为的原因。在这个问题和slice Internal post之间,你应该很好地理解它们是如何工作的。嗨,Nick,append没有深度复制,我这里有一个例子,它使用append并将指针附加到一个slice,并显示如果你修改底层数据,它会为所有这些数据修改它,因此显示append不会进行深度复制。所以“append”只是将指针附加到a_片,a_片有一个poniter到存储数据的内存中?我听说“append”将创建新内存来保存数据,当它附加一个片而不是int或float32时,我错了吗?嗨,Nick,片中有一个指向底层数组的指针,因此即使复制了片,新复制的片仍然会指向dame底层数组。您可以阅读更多关于片内部的内容herehttps://blog.golang.org/slices-intro
var b_slice [][]int

for i:=0; i<num; i++{
  var a_slice []int
  a_slice = some_function()
  b_slice = append(b_slice, a_slice) 
}