
离线 TA的专栏
- 打卡等级:热心大叔
- 打卡总天数:204
- 打卡月天数:0
- 打卡总奖励:3145
- 最近打卡:2023-08-27 04:34:14
|
目录
- 一、浅拷贝同根
- 二、扩容摆脱同根
- 三、Empty与nil
一、浅拷贝同根
- func main() {
- nums := [3]int{}
- nums[0] = 1
- fmt.Printf("nums: %v , len: %d, cap: %d\n", nums, len(nums), cap(nums))
- dnums := nums[0:2]
- dnums[0] = 5
- fmt.Printf("nums: %v ,len: %d, cap: %d\n", nums, len(nums), cap(nums))
- fmt.Printf("dnums: %v, len: %d, cap: %d\n", dnums, len(dnums), cap(dnums))
- }
复制代码输出: - nums: [1 0 0] , len: 3, cap: 3nums: [5 0 0] ,len: 3, cap: 3dnums: [5 0], len: 2, cap: 3
复制代码slice若不是深拷贝或者重新生成新空间,无论通过参数传递还是使用 := 或者 [:]赋值都存在同根性。
二、扩容摆脱同根
Slice与Array最大的区别在于Slice不需要指定大小会自动扩容等一些特性,我们在接受并习惯同根性后。Slice在多次append元素时,若满足扩容策略,这时候内部就会重新申请一块内存空间,将原本的元素拷贝一份到新的内存空间上。此时其与原本的数组就没有任何关联关系了,再进行修改值也不会变动到原始数组。 - func main() {
- nums := [3]int{}
- nums[0] = 1
- fmt.Printf("nums: %v , len: %d, cap: %d\n", nums, len(nums), cap(nums))
- dnums := nums[0:2]
- dnums = append(dnums, []int{2, 3}...)
- dnums[1] = 1
- fmt.Printf("nums: %v ,len: %d, cap: %d\n", nums, len(nums), cap(nums))
- fmt.Printf("dnums: %v, len: %d, cap: %d\n", dnums, len(dnums), cap(dnums))
- }
复制代码输出 : - nums: [1 0 0] , len: 3, cap: 3nums: [1 0 0] ,len: 3, cap: 3dnums: [1 1 2 3], len: 4, cap: 6
复制代码 三、Empty与nil
Empty - func main() {
- nums := []int{}
- renums := make([]int, 0)
-
- fmt.Printf("nums: %v, len: %d, cap: %d\n", nums, len(nums), cap(nums))
- fmt.Printf("renums: %v, len: %d, cap: %d\n", renums, len(renums), cap(renums))
- }
复制代码输出: - nums: [], len: 0, cap: 0renums: [], len: 0, cap: 0
复制代码nil - func main() {
- var nums []int
- fmt.Println(nums,len(nums),cap(nums))
- }
复制代码输出 通过输出来看我们会发现不管是数据还是len 和cap都是相同的输出内容。
那我们就来用代码来证明一下他们是否真的一致 - func main() {
- var nums []int
- renums := make([]int, 0)
- if nums == nil {
- fmt.Println("nums is nil.")
- }
- if renums == nil {
- fmt.Println("renums is nil.")
- }
- }
复制代码输出:
nums is nil.
输出结果是不是出乎意料!不过聪明如你肯定已经通过自己的经验想到了答案。
一个有分配空间(Empty)一个没有分配空间(nil)
以上就是我使用slice遇到的坑,这里不再针对map做特殊分析了。
到此这篇关于Golang Slice和map的坑的文章就介绍到这了,更多相关Golang Slice和map内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|