go学习--切片
来源:互联网 发布:在淘宝买东西省钱的app 编辑:程序博客网 时间:2024/05/16 02:49
切片的类型是 []T,T 是切片元素的类型。和数组不同的是,切片没有固定的长度。属于变长数组
切片的字面值和数组字面值很像,不过切片没有指定元素个数:
letters := []string{"a", "b", "c", "d"}
切片可以内置函数 make 创建,函数签名为:func make([]T, len, cap) []T
T 代表被创建的切片元素的类型。函数 make 接受一个类型、一个长度和一个可选的容量参数。
var s []byte
s = make([]byte, 5, 5)
当容量参数被忽略时,它默认为指定的长度。下面是简洁的写法:
s := make([]byte, 5)
可以使用内置函数 len 和 cap 获取切片的长度和容量信息。
b := []byte{'g', 'o', 'l', 'a', 'n', 'g'}
a := b[m:n] //b[m]到b[n-1]中的元素赋值给新的切片
要增加切片的容量必须创建一个新的、更大容量的切片,然后将原有切片的内容复制到新的切片。
append增加切片元素时,如果超出原有切片长度,则会重新申请一个新的切片,然后放入新增元素,
之后将新切片命名为原来的切片名
如果多个切片同时指向同一个数组,一个切片改变数组的值,则所有相关的切片的值都会被改变
eg:
func main() {
a := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := a[:6] //[0 1 2 3 4 5]
s2 := a[5:] //[5 6 7 8 9]
fmt.Println(s1, len(s1), cap(s1)) //6 10
fmt.Println(s2, len(s2), cap(s2)) //5 5
s3 := s1[3:7] //
fmt.Println(s3, len(s3), cap(s3)) //[3 4 5 6] 4 7
s4 := make([]int, 3, 6)
s4 = append(s4, 1, 2, 3)
fmt.Println(s4, len(s4), cap(s4)) //[0 0 0 1 2 3] 6 6
s1[5] = 10 //会改变原数组
fmt.Println(a)
fmt.Println(s1, len(s1), cap(s1)) //[0 1 2 3 4 10] 6 10
fmt.Println(s2, len(s2), cap(s2)) //[10 6 7 8 9] 5 5
}
0 0
- go学习--切片
- Go语言学习笔记 --- slice切片
- Go学习笔记-Go语言数组array和切片slice
- Go学习笔记:数组和数组切片的行为
- go的学习记录(二)--- 数组与数组切片
- Go语言学习(十)bytes包处理字节切片
- Go语言基础学习七-指针与切片操作
- Go学习笔记(七)结构体,切片(Slice)
- go语言学习----字符串、数组和切片的应用
- go语言学习-数组切片的创建和使用方法
- Go语言学习笔记之数组、数组切片和map
- 【Go学习】slice切片的本质及操作——切片的追加、删除、插入等
- Go 语言切片(Slice)
- go数组、切片
- Go语言切片
- go-数组和切片
- Go语言-切片
- go数组切片
- java之poi操作excel-批量导入导出
- 几种随机算法的实现原理
- httpurlconnection的编码
- 被说了很多遍的设计模式---外观模式
- 找最大值,最小值,累加
- go学习--切片
- Canvas基本使用
- LeetCode 437 Path Sum III (DFS)
- 使用API网关构建移动端友好的API服务
- 第八周—等差数列
- C++ 对象的内存布局(上)
- 无向图双连通分量(poj-3352)
- python问题:IndentationError:expected an indented block错误解决
- CodeForces 724B Batch Sort