
代码是这样的 ,要实现建立一个新的二维数组
变得要多写一行
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 年 8 月 17 日 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 也是可见的 |