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
    }
    

    执行结果:

  • 相关阅读:
    linux下配置java环境
    CentOS6 配置静态IP
    数据库的事务
    MySQL总论
    JDBC面试题
    scp命令
    大数据练习题
    Linux下的Mysql安装 & 配置
    Hive的安装配置 & 基础指令
    本地存储localStorage以及它的封装接口store.js的使用
  • 原文地址:https://www.cnblogs.com/codedoge/p/10559108.html
Copyright © 2011-2022 走看看