切片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. 项目中经常使用的JS方法汇总,非常有用

    // 对Date的扩展,将 Date 转化为指定格式的String   // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符,   // 年(y)可以用 1- ...

  2. 建立Cent OS7server有些问题需要注意

    1.与网络有关的问题 (1)网络配置问题 CentOS 7 与曾经的版本号项目在网络配置等许多的地方都做了比較大的改动,比如你会发现ifconfig命令没有了... 这是由于,centos7以下使用: ...

  3. [ Alcatraz ]管理Xcode插件

    [ Alcatraz 配置 ] 1.包管理器在线安装 Terminal终端 $ curl -fsSL https://raw.githubusercontent.com/supermarin/Alca ...

  4. hust1384---The value of F[n]

    Description For any integer i>=3 we have F[i]=(F[i-1]+2*F[i-2]+3*F[i-3])%9901; Now give you F[0], ...

  5. firefox里面title乱码

    原文:firefox里面title乱码 昨天 在notepad++里面写得文档里面title里面有中文,即使在文档里面写有charset=’UTF-8’, 但是保存后在firefox运行,浏览器标签标 ...

  6. 怎样才能充分利用SQL索引

    原文:怎样才能充分利用SQL索引 背景:目前WEB的普及太快,很多网站都会因为大流量的数据而发生服务器习惯性死机,一个查询语句只能适用于一定的网络环境.没有优化的查询当遇上大数据量时就不适用了. 本文 ...

  7. UVA - 11986 Save from Radiation

    Description J Save from Radiation Most of you are aware of Nuclear Power Plant Explosion at Fukushim ...

  8. sax(用于处理XML事件驱动的推模型)解析例子

    SAX解析 Java程序如下: import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; impor ...

  9. Object-C中Category类体验

    Object-C中Category类体验 Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务 ...

  10. javascript and dom1

    <script type="text/javascript"> //数组 var beatles=Array(4); var beatles=Array(); cons ...