Go语言 slice切片的使用

  切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。

  Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“那一块”,切的过程包含从哪里开始(切片的起始位置)及切多大(切片的大小),容量可以理解为装切片的口袋大小,如下图所示。

  从数组或切片生成新的切片

  切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。

  从连续内存区域生成切片是常见的操作,格式如下:

  slice [开始位置 : 结束位置]

  语法说明如下:

    • slice:表示目标切片对象;
    • 开始位置:对应目标切片对象的索引;
    • 结束位置:对应目标切片的结束索引。

  从数组或切片生成新的切片拥有如下特性:

  • 取出的元素数量为:结束位置 - 开始位置;
  • 取出元素不包含结束位置对应的索引,切片最后一个元素使用 slice[len(slice)] 获取;
  • 当缺省开始位置时,表示从连续区域开头到结束位置;
  • 当缺省结束位置时,表示从开始位置到整个连续区域末尾;
  • 两者同时缺省时,与切片本身等效;
  • 两者同时为 0 时,等效于空切片,一般用于切片复位。

  程序实例代码

package main

import "fmt"

func main() {
    fmt.Println("从数组或切片生成新的切片")
    //a 是一个拥有 3 个整型元素的数组,被初始化为数值 1 到 3
    var a = [3]int{1, 2, 3}
    //使用 a[1:2] 可以生成一个新的切片   [2] 就是 a[1:2] 切片操作的结果
    fmt.Println(a, a[1:2])
    fmt.Println("表示原有的切片")
    //生成切片的格式中,当开始和结束位置都被忽略时,生成的切片将表示和原切片一致的切片
    fmt.Println(a[:])
    fmt.Println("重置切片,清空拥有的元素")
    fmt.Println(a[0:0])

    fmt.Println("直接声明新的切片")
    //声明字符串切片
    var strList []string
    //声明整型切片
    var numList []int
    //声明空整型切片
    var numListEmpty = []int{}
    //输出3个切片
    fmt.Println(strList, numList, numListEmpty)
    //输出3个切片大小
    fmt.Println(len(strList), len(numList), len(numListEmpty))

    fmt.Println("使用 make() 函数构造切片")
    c := make([]int, 2)
    d := make([]int, 2, 10)
    fmt.Println(c, d)

    fmt.Println(len(c), len(d))

}

  输出结果

原文地址:https://www.cnblogs.com/personblog/p/12249148.html