切片slice
1、切片
切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用类型的机制
切片的使用和数组类似,如遍历切片,访问切片的元素和求切片长度len(slice)都一样。
切片的长度是可以变化的,因此切片是一个可以动态变化的数组
2、切片的定义
var 切片名 []类型
比如: var a []int
3、切片的使用
3.1 通过引用一个已声明好的数组
func main() {
intArr := [...]int{0, 1, 2, 3, 4, 5, 6}
slice := intArr[1:6]
}
slice是一个切片
intArr[1:6]表示引用到intArr这个数组
引用intArr数组的起始下标为1,最后的下标为3(但是不包含3)
3.2 通过make来创建切片
基本语法:var 切片名 []type = make([]type,len,cap)
参数说明:type就是数据类型,len为长度,cap为容量(可选),cap不小于len
func main() {
var slice []int = make([]int, 5, 10)
// slice必须make后才能使用
slice[0] = 1
slice[4] = 9
}
通过make方式创建切片可以指定切片的大小和容量
如果没有给切片的各个元素赋值,那么就会使用默认值,
通过make方式创建的切片对应的数组,是由make底层维护,对外不可见,即只能通过slice去访问各个元素
3.3 直接指定具体数组,使用原理类似make方式
func main() {
var slice []string = []string{"jake", "tom", "marry"}
}
3.4 切片可以继续切片
func main() {
var slice []string = []string{"jake", "tom", "marry"}
slice2 := slice[1:3]
}
3.5 用append内置函数,可以对切片进行动态追加
func main() {
var slice []string = []string{"jake", "tom", "marry"}
slice = append(slice, "Lucy", "Lily")
fmt.Printf("slice追加后=%v\n", slice)
var slice2 []string = []string{"jake", "tom", "marry"}
// 可以追加切片
slice = append(slice, slice2...)
fmt.Printf("slice追加切片slice2后=%v\n", slice)
}
输出:
slice追加后=[jake tom marry Lucy Lily]
slice追加切片slice2后=[jake tom marry Lucy Lily jake tom marry]
切片append操作的原理分析:
a. go底层会创建一个新的数组newArr(安装扩容后大小)
b. 将slice原来包含的元素拷贝到新的数组newArr
c. slice重新引用到newArr
注意newArr是底层来维护的,程序员不可见。
3.6 使用copy内置函数来实现切片的拷贝操作
func main() {
var slice []int = []int{1, 2, 3, 4, 5}
slice2 := make([]int, 10)
copy(slice2, slice)
fmt.Printf("slice2=%v\n", slice2)
}
4、string和slice
string底层是一个byte数组,本身是引用这个byte数组的切片 ,因此string也可以进行切片处理
func main() {
str := "www.baidu.com"
slice := str[10:]
fmt.Printf("slice=%v\n", slice)
}
string是不可变的,也就是说不能通过str[0]='z'方式来修改字符串
如果需要修改字符串,可以先将string->[]byte或者[]rune->修改后重新转成string
切片slice的更多相关文章
- go 数组(array)、切片(slice)、map、结构体(struct)
一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...
- golang切片slice
切片slice是引用类型 len()函数获取元素的个数 cap()获取数组的容量 1.申明方式 (1)var a []int 与数组不同的是他不申明长度(2)s2 := make([]int, 3, ...
- 在python&numpy中切片(slice)
在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...
- Golang 入门 : 切片(slice)
切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...
- Go 灵活多变的切片Slice
我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...
- 7 切片slice
include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...
- go递归函数如何传递数组切片slice
数组切片slice这个东西看起来很美好,真正用起来会发现有诸多的不爽. 第一,数组.数组切片混淆不清,使用方式完全一样,有时候一些特性又完全不一样,搞不清原理很容易误使用. 第二,数组切片的appen ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- Go语言【第十二篇】:Go数据结构之:切片(Slice)、范围(Range)、集合(Map)
Go语言切片(Slice) Go语言切片是对数组的抽象,Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数 ...
- go中的数据结构切片-slice
1.部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0: bytes = []btye{'h', 'e', 'l', 'l', 'o'} 变量byt ...
随机推荐
- keepalived检测UDP端口
keepalived支持的健康检测方式有:HTTP_GET|SSL_GET.TCP_CHECK.SMTP_CHECK.MISC_CHECK. 由于keepalived自身并不支持udp检测,有TCP_ ...
- el-table实现翻页选择和回看
html <el-table ... <!-- row-key的row.id是你的行唯一标识,一般用id,翻页选的关键 --> :row-key="row => ro ...
- tp3.2 写入日志
function logs($content, $subDir = ''){ $subDir = trim($subDir, '/\\'); if (empty($content)) return f ...
- Linux下的zip和tar压缩解压缩命令详解
一.zip压缩工具 zip的压缩包在windows和linux中都比较常用,它可以压缩目录和文件,压缩时录时,需要指定目录下的文件.zip后面先跟目标文件名,即压缩后得自定义压缩包名,然后跟要压缩的文 ...
- Mac下Apache Tomcat安装配置技巧
我们在MAC系统中查看网页时,一般都要使用到tomcat,这是因为appache只支持静态网页,但像asp,php,cgi,jsp等动态就需要tomcat来处理.那么该怎么在自己的MAC中安装tomc ...
- Docker容器 获取宿主机CPU信息等或重启网卡命令操作介绍
一.作用场景及知识点 1. 使用场景(SSH方式除外): A. 运行在Docker容器里面的程序,怎么采集宿主机的CPU.内存.磁盘等信息: B. 容器内更改宿主机的网卡信息,怎么操作宿主机执行命令: ...
- html让容器居中,css让容器水平垂直居中的7种方式
这篇文章主要为大家详细介绍了css让容器水平垂直居中的7种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这种css布局平时用的比较多,也是面试题常出的一个题,网上一搜一大丢,不过还是想自己总 ...
- spider_requests库简单ip代理
"""使用requests 设置ip代理"""import requestsdef func(): url = 'http://ip.273 ...
- 如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?
生产者: 原因: 由于网络原因导致消息发送失败,消息队列没有接收到生产者发送的消息,但生产者认为消息发送成功. 解决办法: transaction模式:事务模式:开启事务,发送消息,成功提交事务,失败 ...
- python学习(day4)
1.selenium库 import selenium #使用selenium跳过登陆 '''selenium pip install selenium ''' from selenium impor ...