go语言中的切片含义和用法详解

embedded/2024/11/20 18:02:39/

Go 语言中的切片(slice)是引用类型,它提供了一种灵活的方式去操作一系列具有相同类型的数据。与数组不同,切片的长度不是固定的,可以动态地增长或缩小。切片在 Go 语言中非常常用,因为它们提供了高效且方便的方式来处理数据集合。

切片的基本概念

  • 切片的定义:切片是一个描述符,包含指向底层数组的指针、长度(len)和容量(cap)。长度是指切片中元素的数量,容量是从切片的第一个元素开始到数组末尾的元素数量。
  • 切片的声明:使用 []T 表示一个元素类型为 T 的切片。
  • 切片的创建
    • 使用 make 函数创建切片:s := make([]int, len, cap),其中 len 是长度,cap 是容量。
    • 从已存在的数组或切片创建切片:s := arr[start:end],这里 start 是起始索引,end 是结束索引(不包括该索引位置的元素)。

切片的用法

  1. 初始化和赋值

    var s []int // 声明一个切片
    s = make([]int, 5) // 创建一个长度为5的切片
  2. 添加元素

    • 使用 append 函数向切片追加元素。如果切片的容量不足以容纳新的元素,append 会自动分配更大的底层数组,并返回新的切片。
      s := []int{1, 2, 3}
      s = append(s, 4, 5) // 追加多个元素
  3. 访问和修改元素

    • 通过索引来访问或修改切片中的元素。
      s := []int{1, 2, 3}
      fmt.Println(s[1]) // 输出: 2
      s[1] = 100        // 修改第二个元素
  4. 遍历切片

    • 可以使用 for 循环或者 range 关键字来遍历切片。
      s := []int{1, 2, 3, 4, 5}
      for i, v := range s {fmt.Printf("索引 %d 对应的值是 %d\n", i, v)
      }
  5. 切片的拷贝

    • 使用 copy 函数可以将一个切片的内容复制到另一个切片中。
      src := []int{1, 2, 3, 4, 5}
      dst := make([]int, len(src))
      copy(dst, src)
  6. 切片的比较

    • 切片不能直接进行比较(例如使用 == 或 !=),但是可以通过比较每个元素来间接实现。
    • Go 1.18 版本引入了泛型,可以使用泛型函数来实现切片的比较。
  7. 多维切片

    • 切片也可以是多维的,即切片的元素本身也是切片。
      m := [][]int{{1, 2, 3},{4, 5, 6},
      }

注意事项

  • 当你传递切片给函数时,实际上传递的是切片的副本,但是这个副本仍然指向原来的底层数组。因此,在函数内部对切片的修改会影响到原始切片。
  • 需要特别注意切片的容量管理,避免不必要的内存分配。

http://www.ppmy.cn/embedded/139139.html

相关文章

【读书笔记-《网络是怎样连接的》- 7】Chapter3_2 路由器

本篇继续介绍路由器及其转发过程。 1 路由器内部结构 路由器内部结构图如图所示。 即主要包含左侧的包转发模块和右侧的端口模块。转发模块负责查找包的发送目的地,端口模块完成包的发送。通过安装不同的硬件,转发模块不仅可以支持以太网,也…

无插件H5播放器EasyPlayer.js网页web无插件播放器选择全屏时,视频区域并没有全屏问题的解决方案

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方…

软考之RESTful 架构的特点

RestFul 架构的特点及其在前后端分离中的实现 一、引言 随着互联网应用的快速发展,系统架构也在不断演变。RESTful(Representational State Transfer)架构作为一种广泛应用的设计风格,因其简洁、灵活和可扩展性而受到关注。尤其…

SpringBoot 增量部署发布(第2版)

一、背景介绍 书接上一篇《SpringBoot 增量部署发布_springboot增量部署-CSDN博客》,上一篇内容实现了将静态资源与jar分离,但是即使是打包成**-exec.jar,解压jar文件,可以看到里面包含了static,resource目录&#xf…

3-KSQL

查看KSQL帮助 在我们使用命令行来对KES进行操作的时候,我们一般是使用KSQL命令行工具来对KES进行操作 学习一个命令的使用方法,是必然少不了我们去查看它的帮助文档 [kingbasenode1 ~]$ ksql --help ksql是Kingbase 的交互式客户端工具。 使用方法:ks…

STM32G4的数模转换器(DAC)的应用

目录 概述 1 DAC模块介绍 2 STM32Cube配置参数 2.1 参数配置 2.2 项目架构 3 代码实现 3.1 接口函数 3.2 功能函数 3.3 波形源代码 4 DAC功能测试 4.1 测试方法介绍 4.2 波形测试 概述 本文主要介绍如何使用STM32G4的DAC模块功能,笔者使用STM32Cube工具…

在MacOS中Finder中通过路径来导航

在Windows中,可以直接在资源管理器的地址栏中输入路径来转到指定位置。 然后换到MacOS中却发现,Finder中没有地址栏。 那怎么转到指定位置呢?快捷键:cmdshiftg 然后粘贴地址,按回车,转到指定地址。 同W…

一文详解架构分层

架构 - 理解构架的分层 技术框架(technological Framework)是整个或部分技术系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。于开发者而言,实际工作从通常采用的是分层模型,这里独立一个章节&#xff0c…