golang切片slice
切片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的更多相关文章
- Golang 入门 : 切片(slice)
切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...
- 转 Golang 入门 : 切片(slice)
https://www.jianshu.com/p/354fce23b4f0 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概 ...
- golang基础---Slice切片
切片Slice在go语言中是单独的类型(指向底层的数组),不同于python(对可迭代对象操作的工具),注意区分数组和slice的区别 定义一个空slice,格式var s []int,这种既没有长度 ...
- Go 灵活多变的切片Slice
我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...
- [Golang]-1 Slice与数组的区别
目录 数组 1.创建数组: 2.数组是值拷贝传递: 切片(slice) 1.首先看看slice的源码结构: 2.slice的创建: 3.slice使用make创建 4.切片作为参数传递 5.Golan ...
- go 数组(array)、切片(slice)、map、结构体(struct)
一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...
- 在python&numpy中切片(slice)
在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...
- golang切片数据结构解释
1. 切片:切片是数组的一个引用,因此切片是引用类型 func main() { var arr = [6]int{1, 2, 3, 4, 5} var slice = arr[1:] fmt.Pri ...
- golang切片类型
切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 ...
随机推荐
- 浅谈数据结构之KMP(串中的模式匹配算法)
KMP算法是一种模式匹配算法的改进版,其通过减少匹配的次数以及使主串不回朔来减少字符串匹配的次数,从而较少算法的相应代价,但是,事件万物是普遍归中的,KMP算法的有效性也是有一定的局限的,我将在本文的 ...
- java编程接口(1) ------ Swing基金会
本文提出了自己的学习笔记.欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 近期想学下java的界面编程,在此记录下. 大多数的Swing应用都被构 ...
- Merge into的使用详解-你Merge了没有
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...
- vs2012代码段,快捷键,snippet 的使用
这篇还是介绍怎么简单我们编写代码------本想放在上一篇 插件 一起,但是怕搜不到, 大神们就没法给我教更好的方式,所以就另写了一篇 [大家看完后,插件resharp如果能实现这效果,请教 ...
- 插件式Web框架
转载构建高性能插件式Web框架 基于MVC插件模式构建支持数据库集群.数据实时同步.数据发布与订阅的Web框架系统.如下图: 1.基于插件式开发 采用插件模式开发的优点是使得系统框架和业务模式有效地进 ...
- Swift中文教程(四)--函数与闭包
原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...
- 使用myeclipse将Javaj项目标ar套餐邂逅classnotfound解决问题的方法
做一件事的今天,该Java项目打包成jar文件.折腾2小时,最终运行jar文件报告classnotfound异常,我觉得程序写入依赖jar包不玩成,但是,我手动添加.或不.网上找了很多办法.或不.后. ...
- UVa 10533 - Digit Primes
题目:输出给定区间中,本身是素数,而且这个数的各位之和也是素数的数(称为位素数)的个数. 分析:数论.首先利用筛法,求出1000000内的全部的素数:然后在利用生成的素数表, 推断每一个数是不是各位之 ...
- 通过EA导入数据库存在表结构并生成文档
通过EA导入数据库存在表结构并生成文档 慕课网,程序员升职加薪神器,点击免费学习 目录[-] 导入数据源,表结构 生成表结构的文档 Enterprise Architect 是超级强大项目管理功能 ...
- CentOS修改用户密码方法
CentOS修改用户密码方法 CentOS修改用户密码方法 1. 普通用户 a. 获取超级用户root权限 命令:su或者su -或者su - root b. passwd 用户名 2. 超级用户 a ...