定义

切片本身不是数组,它指向底层的数组或者数组的一部分。因此,可以使用Slice来处理变长数组的应用场景。 Silice 是一种引用类型。

1、定义一个空的Slice

package main

import (
"fmt"
) func main() {
var slice1 []int //定义一个Slice, []里面什么也没有!!
fmt.Println(slice1)
}

2、 从数组中干获取Slice

func main() {

    arr := []int32{, , } // 定义一个数组
slice := arr[:len(arr)] //从数组中取得Slice,从0开始,取到结束
fmt.Println(slice)
} //output
[ ]

3、使用“make”关键字创建Slice

make([]T, len, cap)

[]T - 表示定义那种类型的Slice

len - 表示Slice的长度

cap - 表示Slice的容量;可以省略,即cap=len

s1 := make([]int, , )
fmt.Println(s1) //output
[0 0 ]

Slice与底层数组的关系图

通过关系图,我们可以得出: Slice_a 长度为3,容量为9, Slice_b 长度为2,容量为8

Reslice

有 Slice 再次生成的Slice。它的特点是:

1. 索引以Slice为准。

2. cap不能超过Slice

3. 索引越界不会从新分配内存,而是直接出错!!

a2 := []byte{'a', 'b', 'c', 'd', 'e'}
s2 := a2[:]
fmt.Println(len(s2), cap(s2)) // output 3, 5 s22 := s2[:]
fmt.Println(len(s22), cap(s22)) // output 2, 5

Append 函数

a3 := make([]int32, , )
fmt.Printf("%v, %p\n", a3, a3) a3 = append(a3, , )
fmt.Printf("%v, %p\n", a3, a3) a3 = append(a3, , )
fmt.Printf("%v, %p\n", a3, a3) //output
[ ], 0x114821d0
[ ], 0x114821d0
[ ], 0x11489c60

copy 函数

copy(src, dst) - 将dest的切片 copy 到 src, 以两者之中最短的切片长度为准。

a1 := []int32{, }
a2 := []int32{, , }
fmt.Println(a1) // output [1 2] copy(a1, a2)
fmt.Println(a1) // output [3 4] copy(a1[:], a2[:]) // // output [4 5]
fmt.Println(a1)

Go - 切片(Slice)的更多相关文章

  1. go 数组(array)、切片(slice)、map、结构体(struct)

    一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...

  2. golang切片slice

    切片slice是引用类型 len()函数获取元素的个数 cap()获取数组的容量 1.申明方式 (1)var a []int 与数组不同的是他不申明长度(2)s2 := make([]int, 3, ...

  3. 在python&numpy中切片(slice)

     在python&numpy中切片(slice) 上文说到了,词频的统计在数据挖掘中使用的频率很高,而切片的操作同样是如此.在从文本文件或数据库中读取数据后,需要对数据进行预处理的操作.此时就 ...

  4. Golang 入门 : 切片(slice)

    切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数 append( ...

  5. Go 灵活多变的切片Slice

    我们知道数组定义好之后其长度就无法再修改,但是,在实际开发过程中,有时候我们并不知道需要多大的数组,我们期望数组的长度是可变的, 在 Go 中有一种数据结构切片(Slice) 解决了这个问题,它是可变 ...

  6. 7 切片slice

    include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...

  7. go递归函数如何传递数组切片slice

    数组切片slice这个东西看起来很美好,真正用起来会发现有诸多的不爽. 第一,数组.数组切片混淆不清,使用方式完全一样,有时候一些特性又完全不一样,搞不清原理很容易误使用. 第二,数组切片的appen ...

  8. [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()

    线性结构的总结 列表list  元组tuple  字符串str  bytes  bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...

  9. Go语言【第十二篇】:Go数据结构之:切片(Slice)、范围(Range)、集合(Map)

    Go语言切片(Slice) Go语言切片是对数组的抽象,Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数 ...

  10. go中的数据结构切片-slice

    1.部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0: bytes = []btye{'h', 'e', 'l', 'l', 'o'} 变量byt ...

随机推荐

  1. input 取消自动填充

    增加属性:  name="clear" 

  2. Data truncated for column

    数据类型不合法造成的.检查插入的数据.

  3. java.lang.IllegalArgumentException: Invalid character found in method name

    1.错误描述 信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors ...

  4. Vim技能修炼教程(13) - 变量

    VimScript变量 上节我们介绍了Python和Ruby来编写Vim插件的方式. 不过,Python和Ruby并不是所有的Vim都支持的功能,如果以最小依赖的原则来说,还是原汁原味的Vimscri ...

  5. 关于python的包

    参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包 ...

  6. stark组件03

    优化代码 1:页面的增删改查url反转的封装到类里:ModelSatrk # 编辑页面的url def get_edit_url(self,obj): edit_url = reverse(" ...

  7. python 之头像上传,预览

    上传头像 我们需要实现的效果是:当我们点击默认头像,用户可以进行选择要上传的头像文件,其原理就是头像的img标签与文件input(file类型)框重合或者关联,可以通过如下两种方式进行实现: 方法一l ...

  8. C语言中库函数strstr的实现

    在C语言中库函数strstr()函数表示在一个字符串str1中查找另一个字符串str2,如果查到则返回str2在str1中首次出现的位置,如果找不到则返回null. char* strstr(char ...

  9. bzoj 4811 由乃的OJ

    bzoj 4811 由乃的OJ 考虑树链剖分. 树剖后用一颗线段树维护一段连续区间,类似于一个函数,各位上进入 \(0/1\) ,输出的数字分别是什么.注意到最多只有 \(64\) 位,可以用一个 \ ...

  10. Python学习-lambda表达式

    lambda只是一个表达式,函数体比def简单很多.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去.lambda表达式是起到一个函数速写的作用.允许在 ...