美文网首页Go
Go中slice的一些问题

Go中slice的一些问题

作者: flow__啊 | 来源:发表于2018-03-14 12:49 被阅读6次

一边上代码,一边上问题吧~

slice := [...]int{4, 5, 6, 7}
slice2 := slice[:2]

append 添加切片内容后,原来的slice会变成什么呢?
slice2 = append(slice2, 0)
slice的内容变为了 4 5 0 7
这很容易理解,因为slice2引用了slice的地址。所以在slice2的未位加了0,就把6顶掉了。

那么,slice2后再加2,1,3,看看slice会变成什么

slice2 = append(slice2, 2, 1, 3) 
//append可以连接两个slice,但是必须在slice后面加...`

slice:[4 5 0 7]
slice2:[4 5 0 2 1 3]
为什么slice没有变化?因为slice2连接上2,1,3之后,明显超出了slice的长度4,go就会重新申请一块新的内存放入[4 5 0 2 1 3]并传给slice2。

连接两个slice的操作如下:
slice3 := append(slice[:], slice2...)
slice3:[4 5 0 7 4 5 0 2 1 3]
那如果把slice作为参数,在另一个函数中修改了slice的值,那么原来的slice值还会变么?

func f2(slice []int){
    slice=append(slice,2,2,2,2)
}
f2(slice3)

slice3的值依旧为:[4 5 0 7 4 5 0 2 1 3]
在go中,大部分这种情况,只要不是传地址,都是值传递,而不是引用传递。

相关文章

  • Go slice那些事

    今晚闲来无事,总结一下Go的slice slice是什么slice在Go中的原型?slice类似数组,是一种定长的...

  • 深入理解 Go Slice

    原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...

  • Go中slice的一些问题

    一边上代码,一边上问题吧~ append 添加切片内容后,原来的slice会变成什么呢?slice2 = app...

  • Go Slice 最大容量大小是怎么来的

    原文地址:Go Slice 最大容量大小是怎么来的 前言 在《深入理解 Go Slice》中,我们提到了 “根据其...

  • Go语言——Slice分析

    Go语言——Slice分析 源码很不好找,在go\src\runtime\slice.go。 根据容量cap*元素...

  • golang slice结构

    使用例子 内存结构 slice在goalng中的结构定义, 在源码src/runtime/slice.go中 一下...

  • Golang之数组和切片

    引用 数组、字符串和切片 Go数组中的索引问题 深入解析 Go 中 Slice 底层实现 Golang 入门 : ...

  • go 中的slice 合并

    go 中的切片合并即两个 slice 相加使用 go 语言内置的append 方法,我们比较常用的是 添加单个元素...

  • go和python的深浅拷贝理解

    go深拷贝, 就是拷贝值 go浅拷贝, 拷贝引用 go中赋值就能实现拷贝,针对引用类型(slice,map,cha...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

网友评论

    本文标题:Go中slice的一些问题

    本文链接:https://www.haomeiwen.com/subject/aeiyottx.html