zoukankan      html  css  js  c++  java
  • go语言的坑:切片的拷贝问题

    在go语言中的切片变量其实就是一个地址,我们先来看一段代码:

    func test_arr() {
    	a := []int{1, 2, 3}
    	var c [][]int
    	b := a
    	c = append(c, b)
    	c = append(c, b)
    	fmt.Println(c)
    	c[0][0] = 9
    	fmt.Println(c)
    	fmt.Println(a)
    	change(a)
    	fmt.Println(c)
    	fmt.Println(b)
    }
    
    func change(cp []int) {
    	cp[0] = 6
    }
    

      

    输出结果如下:

    我们不难发现,在上面代码中,并不需要传递切片a的地址,就可以修改a中的值。在这种情况下,如果要拷贝一个新的切片对象的话,就需要使用go语言官方提供的一个内置函数copy(copy_slice,src_slice)。

    使用示例:

    func test_arr() {
    	a := []int{1, 2, 3}
    	var c [][]int
    	b := make([]int, len(a)) //使用copy函数必须复制切片的结构必须和源数据结构一致
    	copy(b, a)
    	c = append(c, b)
    	c = append(c, b)
    	fmt.Println(c)
    	c[0][0] = 9
    	fmt.Println(c)
    	fmt.Println(a)
    	change(a)
    	fmt.Println(c)
    	fmt.Println(b)
    }
    
    func change(cp []int) {
    	cp[0] = 6
    }
    

    执行结果:

  • 相关阅读:
    CSS躬行记(9)——网格布局
    CSS躬行记(8)——裁剪和遮罩
    CSS躬行记(7)——合成
    CentOS 系统目录解析
    Linux 命令快捷键
    秒的精确度
    Oracle和mysql中装逼dual表的用途介绍
    mysql 的mgr集群
    ansible笔记
    cygwin
  • 原文地址:https://www.cnblogs.com/codedoge/p/10559108.html
Copyright © 2011-2022 走看看