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()获取容量 ...
随机推荐
- C# 你不能调用的问题剪贴板线程
最近在做一个项目,需要使用线程,并使用剪贴板,头发得到较少的数据在剪贴板上后,现在的孩子线程创建一个子线程,我特别困惑,上网查资料.最后,得到最终的.下面的例子现在将概括解: 第一步: public ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- stl之map容器的原理及应用
容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...
- mysql 的load data infile要使用
LOAD DATA INFILE从文本文件中读出的声明以极高的速度到表. 1.基本语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fi ...
- txt 开关 csv 可通用 工具
Ruby Txt 开关 CSV 常用工具 to require 'csv' namespace :sys_file_conver do desc "把txt数据导入到csv中" t ...
- 隐藏Console形式无效(继续1)
[2014/10/19 23:57 ] :由port主机遥控. 该程序的执行后,计划自己主动开放之机999port,其他计算机将能够通过999port机器的操作. 程序中使用的到的命令: telne ...
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...
- 突破IP限制动态替换代理ip。
须要导入的两个jar包 实现的javabean <span style="font-size:18px;">package com.jx.po; public clas ...
- jquery_mobile.js+html5+css3打造手机平板等各种效果
http://www.w3school.com.cn/jquerymobile/jquerymobile_events_orientation.asp
- 跟着大神重写的KNN 文档归类小工具
·背景 在知道KNN之前,楼主有时候会粗糙地做一些分类模型的计算.在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393. ...