当前位置: 首页 > article >正文

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

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.kler.cn/a/402213.html

相关文章:

  • mysql8.4+mysql router读写分离
  • Android WMS概览
  • KF UKF
  • linux004.在ubuntu中smb.conf配置文件中配置内容详解
  • 最优化方法_罚函数法例题
  • 【青牛科技】视频监控器应用
  • (计算机毕设)基于SpringBoot+Vue的房屋租赁系统的设计与实现
  • 共享门店模式:创新零售的新篇章
  • 11.18 Maven-SpringBootWeb入门
  • Spring Boot图书馆管理系统:疫情中的技术实现
  • R环境依赖的备份与恢复全攻略
  • 【PHP小课堂】一起学习PHP中的反射(三)
  • selenium元素定位校验以及遇到的元素操作问题记录
  • OpenAI Adjusts Strategy as ‘GPT’ AI Progress Slow
  • 将大模型生成数据存入Excel,并用增量的方式存入Excel
  • Linux全局替换配置文件的IP
  • 【PyTorch][chapter 28] 揭秘 Transformer:缩放定律指南
  • 第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇
  • flex布局样式 类名化scss(sass)
  • 在centos7中安装SqlDeveloper的Oracle可视化工具
  • 网络安全领域的最新动态和漏洞信息
  • 解决docker mysql命令行无法输入中文
  • java设计模式 - 装饰者模式
  • go-zero(三) 数据库操作
  • 集群聊天服务器(8)用户登录业务
  • 游戏引擎学习第19天