切片slice是引用类型 len()函数获取元素的个数 cap()获取数组的容量

1.申明方式

(1)var a []int 与数组不同的是他不申明长度
(2)s2 := make([]int, 3, 10) //元素的类型,元素的数量,元素的容量
    fmt.Println(len(s2), cap(s2)) 输出元素的数量和容量

2.讲数组转换成切片

 a := []int{}
fmt.Println(a)
s1 := a[:] //取前10个元素 [5:]取 5-最后的元素
fmt.Println(s1)

3.slice测试

 a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'h'}
sa := a[:]
fmt.Println(string(sa))
sd1 := a[:]
fmt.Println(string(sd1)) //看看效果

我们看到这样的是slice_a指向Array_ori 其实是从c指向到k 我们用fmt.Println(cap(slice_a)) 结果肯定不是3

自己动手试一下下边这个

     a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'h'}
sa := a[:]
fmt.Println(string(sa))
s := sa[:]
fmt.Println(string(s))
s2 := sa[:]
fmt.Println(string(s2))

4.Apppend的用法
当使用append的时候,我们追加元素到切片的尾部,如果我们追加的在slice容量之中的时候我们会发现,

内存地址是不改变的,如果我们追加的超过容量了,内存地址也就改变了

 a := make([]int, , )
fmt.Printf("%p", a)
a = append(a, , , )
fmt.Printf("%v %p\n", a, a)
a = append(a, , , )
fmt.Printf("%v %p\n", a, a)

运行如下图

slice是指向底层的数组,如果多个slice指向同一个的时候,其中一个改变了,其他的都改变。试一下下边这个

 a := []int{, , , , }
s1 := a[:]
s2 := a[:]
fmt.Println(s1, s2)
s1[] =
fmt.Println(s1, s2)

当slice中append追加的元素超过了指向的容量,就会重新指向一个新的底层数组,

所以一个底层数组的改变,不会带动其他的改变,

试一下下边的代码

 a := []int{, , , , }
s1 := a[:]
s2 := a[:]
fmt.Println(s1, s2)
s2 = append(s2, , , , , , , )
s1[] =
fmt.Println(s1, s2)

5.copy
这是一个拷贝的函数,下边的代码是从s2拷贝到s1 然后我们会看到结果是[7 8 9 4 5]

如果是copy(s2,s1) 我们看到的结果是[1 2 3]

s1 := []int{, , , , }
s2 := []int{, , }
copy(s1, s2)
fmt.Println(s1)

转载自微度网络 http://www.widuu.com/archives/08/771.html

golang切片slice的更多相关文章

  1. Golang 入门 : 切片(slice)

    切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...

  2. 转 Golang 入门 : 切片(slice)

    https://www.jianshu.com/p/354fce23b4f0 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概 ...

  3. golang基础---Slice切片

    切片Slice在go语言中是单独的类型(指向底层的数组),不同于python(对可迭代对象操作的工具),注意区分数组和slice的区别 定义一个空slice,格式var s []int,这种既没有长度 ...

  4. Go 灵活多变的切片Slice

    我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...

  5. [Golang]-1 Slice与数组的区别

    目录 数组 1.创建数组: 2.数组是值拷贝传递: 切片(slice) 1.首先看看slice的源码结构: 2.slice的创建: 3.slice使用make创建 4.切片作为参数传递 5.Golan ...

  6. go 数组(array)、切片(slice)、map、结构体(struct)

    一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...

  7. 在python&numpy中切片(slice)

     在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...

  8. golang切片数据结构解释

    1. 切片:切片是数组的一个引用,因此切片是引用类型 func main() { var arr = [6]int{1, 2, 3, 4, 5} var slice = arr[1:] fmt.Pri ...

  9. golang切片类型

    切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 ...

随机推荐

  1. 漫游Kafka实战篇clientAPI

    原文地址:http://blog.csdn.net/honglei915/article/details/37697655 Kafka Producer APIs 旧版的Procuder API有两种 ...

  2. unity3d NGUI入门(描述和使用插件参数)

    我用NGUI它是3.5.4,Unity3d版本号是4.3.4f需要 NGUI3.5.4 下载NGUI,这是破解版的,用于学习.假设是商用.请支持正版 插件的导入 1.NGUI的导入,双击NGUI Ne ...

  3. JS的parent对象

    top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...

  4. Effective C++之‘宁以pass-by-reference-to-const替换pass-by-value’

    Effective C++之'宁以pass-by-reference-to-const替换pass-by-value' 缺省情况下C++以by value 方式(一个继承自C的方式)传递对象至函数.除 ...

  5. 【Swift】沙盒缓存

    本地sandbox缓存目录     沙盒の 主目录: po NSHomeDirectory()   /Users/SpongeBob/Library/Developer/CoreSimulator/D ...

  6. CentOS修改用户密码方法

    CentOS修改用户密码方法 CentOS修改用户密码方法 1. 普通用户 a. 获取超级用户root权限 命令:su或者su -或者su - root b. passwd 用户名 2. 超级用户 a ...

  7. ASP.NET 依赖注入。

    ASP.NET 依赖注入. http://www.it165.net/pro/html/201407/17685.html 我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注 ...

  8. Java多线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. Windows下一个ROracle安装与使用

    ROracle一个简短的引论: ROracle这是R连接到接入Oracle数据库DBI(Oracledatabase interface)介面.这是基于OCI一个DBI兼容Oracle司机. 具体见说 ...

  10. IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权

    原文:IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权 上一篇: MyEclipse中消除frame引起的“the file XXX can not be found.Please ...