代码是这样的 ,要实现建立一个新的二维数组
变得要多写一行
var newserverlist [][]string
for _, addr := range serverlist {
tmpaddr=addr 这样 newserverlist 会是一个值一样的数组
for i:=0;i<len(filearr);i++{
//tmpaddr := make([]string,len(addr))
//copy(tmpaddr,addr)
tmpaddr[1] = filearr[i][0]
tmpaddr[3] = filearr[i][1]
newserverlist = append(newserverlist,tmpaddr)
fmt.Println(newserverlist)
}
}
1
Lpl 2018-08-17 16:22:43 +08:00
slice 里边存了三个值:底层数组指针、长度、容量。
如果直接:tmpaddr = addr,那么你只是把切片复制了一份,其中:底层数组指针、长度、容量,都没有变化。 你的目的应该是把 serverList 这个切片复制出来一个新切片,那么这种方式是可行的: tmpaddr := make([]string,len(addr)) copy(tmpaddr,addr) 例子: func main() { serverList := [][]string { {"a", "b", "c"}, {"aa", "bb", "cc"}, } fmt.Println(serverList[0]) // => [a b c] changeSlice(serverList[0]) fmt.Println(serverList[0]) // => [changed b c] } func changeSlice(slice []string) { slice[0] = "changed" } 函数 changeSlice 接受了一个 slice 的复制体做实参,此复制体与原 slice 存储了相同的指向原始数组的指针,在函数 changeSlice 中修改 slice 指向数组的值,对于原 slice 也是可见的 |