编程笔记 Golang基础 023 切片

2024-02-24 00:04

本文主要是介绍编程笔记 Golang基础 023 切片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编程笔记 Golang基础 023 切片

  • 一、切片
  • 二、定义与初始化
  • 三、基本操作
  • 四、示例

Go语言中的切片(slices)是基于数组的抽象数据类型,它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据,而是指向底层数组的一个连续区域,并记录了该区域的长度和容量。

一、切片

Go语言中的切片(slices)是基于数组的抽象数据类型,它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据,而是指向底层数组的一个连续区域,并记录了该区域的长度和容量。
切片(slices)在Go语言中主要用于管理动态大小的、连续内存区域中的元素序列。它们是数组概念的一种抽象,提供了对底层数组的一个可变视图,允许程序员更加灵活地操作数据集合。切片的主要用途包括:

  1. 动态扩展:与固定长度的数组不同,切片的长度可以增长或缩短,这意味着开发者可以在程序运行时根据需要添加或删除元素。

  2. 高效访问和修改:虽然切片是引用类型,但其内部仍然是基于连续内存的数组,因此它继承了数组快速随机访问的优点,对于大量数据的操作非常高效。

  3. 内存管理简化:切片自动处理内存分配和可能的扩容需求,通过 append 函数可以很容易地在末尾追加元素,如果容量不足,Go会自动创建一个新的更大的数组,并将原数组的数据复制过去。

  4. 子集操作:可以通过索引范围来创建一个原始切片的新视图(即子切片),而不需要复制任何数据。这样可以方便地处理大型数据结构的一部分。

  5. 函数参数和返回值:由于切片具有轻量级的特点(仅存储指向数组的指针、长度和容量),将其作为函数参数传递比传递整个数组更高效,同时,它可以作为多变数量参数或动态生成结果的理想选择。

综上所述,Go语言中的切片适用于大多数需要动态、灵活处理一系列相同类型数据的情况,例如实现堆栈、队列、列表等数据结构,或者在文本处理、网络编程等领域中处理不定长度的数据流。

二、定义与初始化

// 通过 make 函数创建一个长度为3、容量也为3的整数切片
slice := make([]int, 3)
// 或者直接初始化
slice2 := []int{1, 2, 3}// 创建并初始化的同时指定容量(长度必须小于等于容量)
slice3 := make([]int, 2, 5) // 长度为2,容量为5

三、基本操作

  • 访问元素与修改元素:
slice := []int{10, 20, 30}
fmt.Println(slice[0]) // 输出: 10
slice[1] = 30 // 修改第二个元素为30
  • 遍历切片:
for index, value := range slice {fmt.Printf("Index: %d, Value: %d\n", index, value)
}
  • 切片截取(子切片):
// 创建一个新的切片,引用原切片的部分元素
subSlice := slice[1:3]
fmt.Println(subSlice) // 输出: [20 30]
  • 扩展切片:
// 使用 append 函数添加元素到切片,如果超出容量会自动扩容
slice = append(slice, 40)
fmt.Println(slice) // 输出: [10 30 30 40]

四、示例

package mainimport ("fmt"
)func main() {// 初始化一个切片slice := []int{1, 2, 3, 4, 5}// 打印原始切片fmt.Println("Original Slice:", slice)// 截取子切片subSlice := slice[1:3]fmt.Println("Sub-slice:", subSlice)// 在原始切片上追加元素slice = append(slice, 6, 7, 8)fmt.Println("Appended Slice:", slice)// 遍历切片for i, v := range slice {fmt.Printf("Index: %d, Value: %d\n", i, v)}// 容量和长度查询lenOfSlice := len(slice)capOfSlice := cap(slice)fmt.Printf("Length of slice: %d, Capacity of slice: %d\n", lenOfSlice, capOfSlice)// 创建新的切片,但共享相同的底层数组空间newSlice := slice[:lenOfSlice/2]fmt.Println("New Slice (shares memory):", newSlice)// 修改新切片影响原始切片newSlice[0] = 99fmt.Println("After modification to newSlice:")fmt.Println("Original Slice:", slice)fmt.Println("New Slice:", newSlice)
}

在这个综合示例中,我们展示了如何初始化切片、截取子切片、扩展切片、遍历切片以及查看切片的长度和容量。同时,还展示了切片之间的内存关系:对一个切片的修改可能会影响到共享相同底层数组的其他切片。

这篇关于编程笔记 Golang基础 023 切片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740357

相关文章

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-