【golang中的切片的相关知识点】[ ] slice

golang-切片

  • 切片的定义和初始化
  • 切片的内存分析
  • 切片的操作
    • 获取长度和容量
    • 追加元素
    • 复制切片
  • 切片的遍历
  • 切片的特性
  • 总结

Golang中的切片是一种灵活且强大的数据结构,它可以动态地增长和缩小。切片是基于数组的抽象,它提供了更方便的操作和更灵活的内存管理。在本文中,我们将全面分析Golang中切片的相关知识点,以帮助读者清晰认识切片的用法。

切片的定义和初始化

在Golang中,切片的定义形式为:var sliceName []dataType,其中sliceName是切片的名称,dataType是切片中元素的数据类型。切片可以通过make函数来初始化,也可以通过对数组进行切片操作来创建。例如,下面是两种切片的初始化方式的示例:
在这里插入图片描述

//切片定义方式1
//从数组中截取
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice := myArray[2:7]//定义方式二
//通过make
slice := make([]int,5,10)//定义方式三
//初始化 []int{....}
slice2 := []int{12,457,78,88}
// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]

在这个示例中,我们首先使用make函数初始化了一个包含5个整数的切片mySlice,并指定了切片的容量为10。然后,我们使用数组myArray进行切片操作,创建了一个包含索引2到索引6的元素的切片mySlice。
在这里插入图片描述

切片的内存分析

在这里插入图片描述
在这里插入图片描述

切片的操作

Golang中的切片支持多种操作,包括获取长度和容量、追加元素、复制切片等。

获取长度和容量

获取长度和容量:切片的长度指的是切片中实际存储的元素数量,可以使用len函数来获取。切片的容量指的是切片底层数组的容量,可以使用cap函数来获取。

// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]
//返回切片长度
len(mySlice )
//返回切片容量
cap(mySlice )

追加元素

追加元素:可以使用append函数向切片中追加元素。当切片的容量不足以容纳新的元素时,append函数会自动扩容切片。

// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]
//切片追加
newslice := append(mySlice ,12,45,78)

在这里插入图片描述

复制切片

复制切片:可以使用copy函数将一个切片的元素复制到另一个切片中。

// 使用make函数初始化切片
var a= make([]int, 5, 10)// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var a= myArray[2:7]
var b= make([]int, 10, 10)
//切片赋值 把 a复制到b去
copy(b,a)

在这里插入图片描述

切片的遍历

在Golang中,可以使用for循环来遍历切片中的元素。下面是一个简单的示例:

var mySlice = []int{1, 2, 3, 4, 5}
//方式1
for i := 0; i < len(mySlice); i++ {fmt.Println(mySlice[i])
}
//方式二
for k,v := range mySlice {fmt.Println(k)fmt.Println(v)fmt.Println(mySlice[k])
}

在这个示例中,我们定义了一个包含5个整数的切片mySlice,并使用for循环遍历切片中的每个元素,并使用fmt.Println函数将其打印出来。

切片的特性

切片有一些特性需要注意:

切片是引用类型:切片是对底层数组的引用,多个切片可以引用同一个底层数组。这意味着对切片的修改会影响到底层数组和其他引用该底层数组的切片。

切片的扩容:当切片的容量不足以容纳新的元素时,切片会自动扩容。扩容的策略是按照一定的规则重新分配更大的底层数组,并将原有的元素复制到新的底层数组中。

切片的传递:切片作为函数参数时,是按引用传递的。这意味着在函数内部对切片的修改会影响到函数外部的切片。

总结

切片是Golang中灵活且强大的数据结构,它可以动态地增长和缩小。切片的定义和初始化相对简单,可以使用make函数初始化切片,也可以通过对数组进行切片操作来创建切片。切片支持多种操作,包括获取长度和容量、追加元素、复制切片等。切片的遍历可以使用for循环来实现。切片有一些特性需要注意,如切片是引用类型、切片的扩容和切片的传递。通过深入了解切片的相关知识点,我们可以更好地理解和使用Golang这种灵活的编程语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是分布式微服务?

什么是分布式微服务&#xff1f; 前言什么是微服务举例说明 什么是分布式图解分布式与微服务单体架构及部署微服务架构分布式影响 分布式微服务架构什么是分布式微服务架构面临的问题 前言 本文旨在讲清楚什么是分布式微服务架构&#xff0c;通过解释微服务架构和分布式架构&a…

瀚高数据库企业版V4单机版-安装手册(Windows)

目录 瀚高数据库企业版V4单机版-安装手册&#xff08;Windows&#xff09; 1. 环境准备 2. 软件安装 3.设置环境变量 4 配置数据库文件 瀚高数据库企业版V4单机版-安装手册&#xff08;Windows&#xff09; 1. 环境准备 ①.安装数据库之前&#xff0c;请确保vcredist_x6…

服务器数据库的防护策略与360后缀勒索病毒解密方法

在当今数字化时代&#xff0c;服务器数据安全面临着越来越多的挑战。其中&#xff0c;勒索病毒攻击就是一种常见的网络威胁之一&#xff0c;最近&#xff0c;很多的公司服务器数据库遭到了360后缀勒索病毒攻击&#xff0c;导致许多重要数据无法读取&#xff0c;一旦企业的数据库…

IDR: Self-Supervised Image Denoising via Iterative Data Refinement

文章目录 IDR: Self-Supervised Image Denoising via Iterative Data Refinement1. noisy-clean pair 比较难获取2. noiser-noisy pair 比较容易获取&#xff0c;但是训练效果呢&#xff1f;2.1 noiser-noisy 训练的模型&#xff0c;能够对 noisy 图像一定程度的降噪2.2 noiser…

YOLOv7 yaml 文件简化

文章目录 修改方式common.pyyolo.pyYOLOv7-ELAN.yaml原始的 YOLOv7 yaml 文件的模块是拆开写的,比较乱, 改进起来也不太容易,这篇博文将 YOLOv7 yaml 文件换了一种写法, 参数量和计算量是完全和原来一致的,区别只是在于 yaml文件的写法不同, 封装后具体的结构可以参考…

希尔排序

希尔排序 排序步骤 1、分组&#xff0c;以任意长度进行分组&#xff08;这个长度我们称作增量gap&#xff09;&#xff1b;通常以总长度的一半这个数为依据进行分组&#xff0c;每间隔 gap 个数即为一组 2、组内排序&#xff1b;组内使用插入排序法进行排序 3、重新设置间隔…

微服务Gateway网关(自动定位/自定义过滤器/解决跨域)+nginx反向代理gateway集群

目录 Gateway网关 1.0.为什么需要网关&#xff1f; 1.1.如何使用gateway网关 1.2.网关从注册中心拉取服务 1.3.gateway自动定位 1.4.gateway常见的断言 1.5.gateway内置的过滤器 1.6.自定义过滤器-全局过滤器 1.7.解决跨域问题 2.nginx反向代理gateway集群 2.1.配置…

Upsource的下载安装使用

一&#xff0c;下载 下载地址&#xff1a; https://www.jetbrains.com/upsource/下载并解压到指定的文件夹 ├── api ├── apps ├── backups # 备份目录 ├── bin # 应用目录 ├── conf # 配置文件 ├── data ├── internal ├── launcher ├── lib ├─…

Java集合详解

1. 集合基础 1.1 集合概述 1.2 ArrayList构造方法和添加方法 1.3 ArrayList集合常用方法 1. 集合基础 1.1 集合概述 集合类的特点:提供一种存储空间可变的存储横型&#xff0c;存储的数据容量可以发生改变 ArrayList ArrayList< >: 可调整大小的数组实现 < >:是…

TextView 必填项pro版

优点 基本解决对齐方式,可以设置前缀隐藏和显示 /*** https://blog.csdn.net/u013982652/article/details/94404711* Android自定义TextView实现必填项前面的*号* 另一种实现方式(推荐使用这种,有非必填情况的话不会有对齐问题)* <p>* <cn.mvp.mlibs.weight.MiRequire…

【Fiddler】Fiddler实现mock测试(模拟接口数据)

软件接口测试过程中&#xff0c;经常会遇后端接口还没有开发完成&#xff0c;领导就让先介入测试&#xff0c;然后缩短项目时间&#xff0c;有的人肯定会懵&#xff0c;接口还没开发好&#xff0c;怎么介入测试&#xff0c;其实这就涉及到了我们要说的mock了。 一、mock原理 m…

CentOS 安装字体 微软雅黑

fc-list命令查看已经安装的字体 fc-list :langzh命令可以查看已安装的中文字体 找到windows系统里面的字体 上传到服务器 /usr/share/fonts/winFonts 下&#xff0c;winFonts目录是自己建立的&#xff0c;名称无要求 如果C:\Windows\Fonts下的字体没法直接传输将这个文件夹复…