Go语言:切片(slice)

简介: Go语言:切片(slice)

简介

切片是相同类型元素的可变长度的集合,通常表示为[]type。同一切片中的元素类型都是同一个type的,它看上去很像数组,但没有长度。切片的底层都有一个数组。


组成

每个切片都由三部分组成:

    • 指向底层数组中某个元素的指针:指向数组的第一个从切片访问的元素,这个元素并不一定是数组的第一个元素。一个底层数组可以对应多个切片,这些切片可以引用数组的任何位置,并且彼此之间的元素可以重叠。
    • 长度(length/len):切片中的元素个数。
    • 容量(capacity/cap):为切片分配的存储空间。

    切片类型的初始化值是nil,没有对应的底层数组,并且长度和容量都是0。所以切片只能和nil比较。如果想检查切片是否为空,则可以使用len(s) == 0来判断。


    创建切片

    创建切片的方式有三种:基于数组创建,直接创建,使用内置函数make创建切片。

    基于数组创建

    举例:

    package main
    import "fmt"
    func main() {
      var drinks = [5]string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"}
      var drinkSlice []string = drinks[0:3]
      fmt.Println(drinkSlice)
    }

    image.gif

    说明:

    ①创建一个string类型的数组。

    ②基于数组创建一个切片。

    Go语言支持以drinks[开始:结束]这样的方式基于数组生成一个切片。

    比如上面程序的打印结果就是

    [矿泉水 绿茶 冰红茶]

    如果想提取数组的2-4个元素,则可以将其实索引指定为1,将终止索引指定为4。

    Go语言的切片原则是“左含右不含”,比如上面的drinks[0:3],就包含了数组索引值为0到2的三个元素,并没有包含索引值为3的元素(可乐)。

    注:如果想指定从哪个元素开始直接打印完后面的所有元素,则可以省略结束,比如[2:]


    直接创建

    packagemainimport"fmt"funcmain() {
    vardrinkSlice= []string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"}
    fmt.Println(drinkSlice)
    }

    image.gif


    使用内置函数创建

    make语法:

    make([]type,len)

    make([]type,len,cap)

    drinkSlice1 :=make([]string,6)
    drinkSlice2 :=make([]string,6,8)

    image.gif

    drinkSlice1和 drinkSlice2的长度都是6,他们的容量分别是6和8。

    目录
    相关文章
    |
    6月前
    |
    存储 JSON 安全
    Go语言切片,使用技巧与避坑指南
    Go语言中的切片(Slice)是动态引用数组的高效数据结构,支持扩容与截取。本文从切片基础、常用操作到高级技巧全面解析,涵盖创建方式、`append`扩容机制、共享陷阱及安全复制等内容。通过代码示例详解切片特性,如预分配优化性能、区分`nil`与空切片、处理多维切片等。掌握这些核心知识点,可编写更高效的Go代码。
    216 2
    |
    2月前
    |
    存储 安全 Java
    【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
    结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
    198 1
    |
    4月前
    |
    Cloud Native 安全 Java
    Go:为云原生而生的高效语言
    Go:为云原生而生的高效语言
    295 1
    |
    5月前
    |
    数据采集 机器学习/深度学习 存储
    Go语言实战案例 - 找出切片中的最大值与最小值
    本案例通过实现查找整数切片中的最大值与最小值,帮助初学者掌握遍历、比较和错误处理技巧,内容涵盖算法基础、应用场景及完整代码示例,适合初学者提升编程能力。
    |
    4月前
    |
    Cloud Native Go API
    Go:为云原生而生的高效语言
    Go:为云原生而生的高效语言
    394 0
    |
    4月前
    |
    Cloud Native Java Go
    Go:为云原生而生的高效语言
    Go:为云原生而生的高效语言
    259 0
    |
    4月前
    |
    Cloud Native Java 中间件
    Go:为云原生而生的高效语言
    Go:为云原生而生的高效语言
    229 0
    |
    4月前
    |
    Cloud Native Java Go
    Go:为云原生而生的高效语言
    Go:为云原生而生的高效语言
    331 0
    |
    4月前
    |
    数据采集 Go API
    Go语言实战案例:多协程并发下载网页内容
    本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
    |
    4月前
    |
    数据采集 JSON Go
    Go语言实战案例:实现HTTP客户端请求并解析响应
    本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。