golang copy函数使用的坑
作者:Robin92 发布时间:2023-07-09 19:53:44
标签:golang,copy
之前用 copy 不多,本以为它是个很方便的函数,没想到在做练习题时竟还是被它坑了。是我对他期望太多了。
func copy(dst, src []Type) int
基本认识:
它只能用于切片,不能用于 map 等任何其他类型
它返回结果为一个 int 型值,表示 copy 的长度
坑位一:切片 dst 需要先初始化长度
不是你定义好类型,就能将 src 完全 copy 到 dst 的,你需要初始化长度。
如果 dst 长度小于 src 的长度,则 copy 部分;
如果大于,则全部拷贝过来,只是没占满 dst 的坑位而已;
相等时刚好不多不少 copy 过来。
坑位二:源切片中元素类型为引用类型时,拷贝的是引用
由于只 copy 切片中的元素,所以如果切片元素的类型是引用类型,那么 copy 的也将是个引用。
如下面例子,matA 和 matB 地址不一样,但 matA[0] 和 matB[0] 的地址是一样的。
func wrongCopyMatrix() {
matA := [][]int{
{0, 1, 1, 0},
{0, 1, 1, 1},
{1, 1, 1, 0},
}
matB := make([][]int, len(matA))
copy(matB, matA)
fmt.Printf("%p, %p\n", matA, matA[0]) // 0xc0000c0000, 0xc0000c2000
fmt.Printf("%p, %p\n", matB, matB[0]) // 0xc0000c0050, 0xc0000c2000
}
如果想 copy 多维切片中的每一个切片类型的元素,那么你需要将每个切片元素进行 初始化 并 拷贝。注意是两步:先 初始化,再 拷贝。
正确的拷贝一个多维数组:
func rightCopyMatrix() {
matA := [][]int{
{0, 1, 1, 0},
{0, 1, 1, 1},
{1, 1, 1, 0},
}
matB := make([][]int, len(matA))
for i := range matA {
matB[i] = make([]int, len(matA[i])) // 注意初始化长度
copy(matB[i], matA[i])
}
fmt.Printf("%p, %p\n", matA, matA[0]) // 0xc00005c050, 0xc000018560
fmt.Printf("%p, %p\n", matB, matB[0]) // 0xc00005c0a0, 0xc0000185c0
}
来源:https://www.jianshu.com/p/be07bee40b08
0
投稿
猜你喜欢
- ASP木马防御: 代码如下:const adTypeBinary=1 dim jpg(1):jpg(0)=CB
- 组合集总计: group by with rollup/cube grouping sets 子查询按执行方式分:标准子查询、关联子查询 标
- 1.怎么样查看数据库字符集 [A]数据库服务器字符集select * from nls_database_parameters,其来源于pr
- 本篇没有考虑异步,多线程及SQL注入WebDatabase 规范中说这份规范不再维护了,原因是同质化(几乎实现者都选择了Sqlite),且不
- 某人使用如下过滤代码,发现经常被黑:n=request.form("username") p=request.form(
- 不知道大家在做页面的时候会不会遇到样式定义不生效的问题,基本的表现就是怎么改样式都没显示或只有某些浏览器正常,这时通常需要做下面的几步:确认
- 随着ajax再网站建设中的的大范围流行,XmlHttp也自然被人们所熟悉。本文介绍了asp任何检测服务器端是否支持xmlhttp组件的方法,
- PHP bin2hex() 函数实例把 "Hello World!" 转换为十六进制值:<?php $str =
- 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或
- 参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP9.6 / SF3 / Chrome2操作系统:Windows蓝色理想
- Python 如何转换string到float?简单几步,让你轻松解决。打开软件,新建python项目,如图所示右键菜单中创建.py文件,如
- PHP PDO 错误与错误处理PDO::ERRMODE_SILENT此为默认模式。 PDO 将只简单地设置错误码,可使用PDO::error
- 问题:我想上传文件时后改名,下载时又将名改回来。 如:我上传一张“我的照片.jpg”上传后改为系统数名“20040302001.jpg”下载
- 1、注册时验证数据库用户名是否存在。 2、输入密码时提示密码强度和验证2次密码输入是否一样。 3、注册时验证数据库联系邮箱是否存在。 4、注
- 因为比较简单,我就不说什么了。一看就明白的!1.sql防注入函数Function ChkStr(InString) &
- 一、用HTTP头信息 也就是用PHP的HEADER函数。PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WE
- URL 编码是什么东东呢?看看我从网上抄的定义: 引用: url编码是一种浏览器用来打包
- 什么是错误页面?是指链接指向的网页现在失效了,原因可能是用户输错了地址,也可能是网站结构调整,内容删除,或者地址变更都有可能出现这种情况。那
- 使用SQL语句生成带有小计合计的数据集:测试用户: scott测试用表: dept,emp/////////////////////////
- 昨天同事无意又谈起了这个老话题,美工和设计师(视觉)有什么不同?以文字排版设计为例,列了下面两个图来说明,可能会有一些启发, 第一个图应该算