Golang 切片
前言
在Go语言中,切片是一个引用类型,它提供了对数组的动态窗口。切片并不存储任何数据,它只是描述了底层数组中的一个片段。切片的定义包括三个部分:指向数组的指针、切片的长度和切片的容量
基本使用
- 声明切片:声明一个未初始化的切片,其值为nil
var s []int
- 创建并初始化切片
- 可以通过make函数创建切片,并指定切片的长度和容量
s := make([]int, 5) // 长度和容量都是5
- 切片也可以通过字面量进行初始化:
s := []int{1, 2, 3, 4, 5}
- 切片现有数组:可以从一个数组或另一个切片创建新的切片
arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:3] // 创建一个新切片,包含arr[1]到arr[2]
- 切片的长度和容量
- 长度:切片中元素的数量,使用len(s)获取。
- 容量:从切片的开始位置到底层数组结束位置的元素数量,使用cap(s)获取
fmt.Println(len(s)) // 输出切片的长度
fmt.Println(cap(s)) // 输出切片的容量
- 切片扩展和收缩:可以重新切片来扩展或收缩一个切片,但不能超过其容量
s = s[:4] // 扩展切片的长度到4,如果容量允许的话
- 添加元素到切片:使用append函数可以向切片添加新元素,如果超过原切片的容量,将自动分配新的底层数组
s = append(s, 6) // 添加元素6到切片
- 遍历切片:可以使用for循环来遍历切片
for i, value := range s {fmt.Println(i, value) // 输出索引和对应的值
}
排序
对切片排序通常使用标准库中的sort包,sort包提供了针对切片的排序函数,可以对不同类型的切片进行排序,包括整数、浮点数、字符串切片等。此外,也可以自定义排序规则
 举几个例子
- 整数切片
import "sort"func main() {s := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}sort.Ints(s)fmt.Println(s) // 输出: [1 1 2 3 3 4 5 5 5 6 9]
}
- 字符串切片
import "sort"func main() {s := []string{"apple", "pear", "banana", "peach"}sort.Strings(s)fmt.Println(s) // 输出: [apple banana peach pear]
}
- 浮点数切片
import "sort"func main() {s := []float64{3.14, 1.59, 2.65, 3.58}sort.Float64s(s)fmt.Println(s) // 输出: [1.59 2.65 3.14 3.58]
}
- 自定义排序规则
import "sort"type Person struct {Name stringAge  int
}func main() {people := []Person{{"Bob", 31},{"John", 42},{"Michael", 17},{"Jenny", 26},}// 按年龄排序sort.Slice(people, func(i, j int) bool {return people[i].Age < people[j].Age})fmt.Println(people) // 输出: [{Michael 17} {Jenny 26} {Bob 31} {John 42}]
}
降序
 可以使用自定义排序,也可以用sort.Reverse配合sort.Sort来达成降序目的
- sort.Reverse函数接受一个- sort.Interface类型的参数,并返回一个新的- sort.Interface
- sort.Sort对这个逆序接口进行排序
 例1:- int类型切片逆序
import ("fmt""sort"
)func main() {list := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}// sort.Reverse 返回的是 sort.Interface 类型// sort.IntSlice(list) 转换切片为 sort.IntSlice 类型,这样就可以使用 sort.Reversesort.Sort(sort.Reverse(sort.IntSlice(list)))fmt.Println(list) // 输出: [9 6 5 5 5 4 3 3 2 1 1]
}
例2:float64类型切片逆序
import ("fmt""sort"
)func main() {list := []float64{3.14, 1.59, 2.65, 3.58}sort.Sort(sort.Reverse(sort.Float64Slice(list)))fmt.Println(list) // 输出: [3.58 3.14 2.65 1.59]
}
例3:string类型切片逆序
import ("fmt""sort"
)func main() {list := []string{"apple", "pear", "banana", "peach"}sort.Sort(sort.Reverse(sort.StringSlice(list)))fmt.Println(list) // 输出: [pear peach banana apple]
}
例4:自定义结构体类型Person切片逆序
import ("fmt""sort"
)type Person struct {Name stringAge  int
}// ByAge 实现 sort.Interface 来按年龄排序
type ByAge []Personfunc (a ByAge) Len() int           { return len(a) }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age > a[j].Age } // 降序func main() {people := []Person{{"Bob", 31},{"John", 42},{"Michael", 17},{"Jenny", 26},}sort.Sort(ByAge(people))fmt.Println(people) // 输出: [{John 42} {Bob 31} {Jenny 26} {Michael 17}]
}
熟悉后,其他用法可自行探索
相关文章:
Golang 切片
前言 在Go语言中,切片是一个引用类型,它提供了对数组的动态窗口。切片并不存储任何数据,它只是描述了底层数组中的一个片段。切片的定义包括三个部分:指向数组的指针、切片的长度和切片的容量 基本使用 声明切片:声…...
 
防止公司办公终端文件数据 | 资料外泄,——自动智能透明加密防泄密软件系统
天锐绿盾公司电脑文件数据资料透明加密防泄密软件系统是一款专门用于保护企业电脑文件数据安全的软件系统。它采用透明加密技术,能够在不影响员工正常工作的情况下,对电脑上的文件数据进行自动加密,从而有效防止企业数据泄密。 PC端访问地址&…...
C#-枚举
枚举类型 (enum type) 是具有一组命名常量的独特的值类型。 下面的示例声明并使用一个名为 Color 的枚举类型,该枚举具有三个常量值 Red、Green 和 Blue: using System; using System;enum Color {Red,Green,Blue }class Test {static void PrintColor(…...
 
Java后端开发——SSM整合实验
文章目录 Java后端开发——SSM整合实验一、常用方式整合SSM框架二、纯注解方式整合SSM框架 Java后端开发——SSM整合实验 一、常用方式整合SSM框架 1.搭建数据库环境:MySQL数据库中创建一个名称为ssm的数据库,在该数据库中创建一个名称为tb_book的表 …...
 
VMware虚拟机安装Ubuntu
准备:Ubuntu的镜像文件,VMware,手. 1.新建虚拟机,选择自定义,下一步。 2.硬件兼容性,选择Workstation 16.x,下一步。 3.选择安装程序光盘映像文件,路径为映像文件所在文件夹,下一步。 4. 创建用户和设置密…...
用一个简单的例子说明单细胞分析中的dgCMatrix数据的结构
dgCMatrix用来存储矩阵的一种数据格式,这种数据格式很适合存储稀疏矩阵(即矩阵中大部分值为0)。dgCMatrix使用三个数组(分别是i,p,x)来存储矩阵。怎么存的呢? 先举一个普通矩阵的例…...
 
【小工具】pixi-live2d-display,直接可用的live2d的交互网页/桌面应用
效果: <script src"https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script> <script src"https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script> <…...
 
vulhub中的Nginx漏洞的详细解析
Nginx漏洞 1.cd到nginx_parsing_vulnerability cd /opt/vulhub/nginx/nginx_parsing_vulnerability 2.执行docker-compose up -d 3.查看靶场是否开启成功 dooker ps 4.访问浏览器 因为这里是80端口所以直接使用ip就能访问成功 5.上传图片 注意这里的图片是含有一句话木马的图…...
 
如何实现公网访问GeoServe Web管理界面共享空间地理信息【内网穿透】
文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…...
 
k8s-存储 11
一、configmapu存储 首先,确保集群正常,节点都处于就绪状态 Configmap用于保存配置数据,以键值对形式存储。configMap资源提供了向 Pod 注入配置数据的方法,旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用…...
 
蓝牙信标定位原理
定位原理:蓝牙信标的定位原理是基于RSSI蓝牙信号强度来做定位的。 根据应用场景不同,通过RSSI定位原理可分为两种定位方式 一、存在性定位 这种方式通常要求所需定位的区域安装一个蓝牙信标即可,手持终端扫描蓝牙信标信号,扫描…...
 
单片机期末复习
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、单片机…...
 
springboot虹软人脸识别集成
准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…...
 
Element+vue3.0 tabel合并单元格span-method
Elementvue3.0 tabel合并单元格 span-method :span-method"objectSpanMethod"详解: 在 objectSpanMethod 方法中,rowspan 和 colspan 的值通常用来定义单元格的行跨度和列跨度。 一般来说,rowspan 和 colspan 的值应该是大于等于…...
Python学习笔记第七十九天(OpenCV轨迹栏)
Python学习笔记第七十九天 OpenCV轨迹栏cv.createTrackbarcv.getTrackbarPos两者合并运用 后记 OpenCV轨迹栏 cv.getTrackbarPos 和 cv.createTrackbar 是 OpenCV 库中用于创建和获取跟踪条位置的函数。这些函数通常用于在视频处理或图像处理应用程序中创建用户界面࿰…...
 
uniapp自定义顶部导航并解决打包成apk后getMenuButtonBoundingClientRect方法失效问题
需求:要在app上的顶部导航提示哪里添加一些东西进去,用uniapp自带的肯定不行啊,所以自定义了所有的页面的顶部导航,之后自定义后用手机调试发现 uni.getMenuButtonBoundingClientRect()这个方法的top获取不到....网上找了很多种方…...
C++入门【26-C++ Null 指针】
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。 NULL 指针是一个定义在标准库中的值为零的常量。请看下面的程序: 实例 #include <iostream> using…...
 
Linux第14步_安装FTP服务器
安装“vim编辑器”后,我们紧接着“安装FTP服务器”。 1、在安装前,要检查虚拟机可以上网,否则可能会导致安装失败。 2、在虚拟机界面右击鼠标,弹出下面的对话框 3、点击“打开终端(E)”,得到下面的界面 :…...
 
Linux截图方法推荐
因为经常会遇到以图为证的情况,而办公设备基本都是linux,所以汇总一下常见的linux截图方式。 1:在 Linux 中系统集成的截图的默认方式 你想要截取整个屏幕?屏幕中的某个区域?某个特定的窗口? 如果只需要获取一张屏幕…...
 
在Gitee上维护Erpnext源
在Gitee上维护Erpnext源 官方的frappe和erpnext地址: GitHub - frappe/frappe: Low code web framework for real world applications, in Python and Javascript GitHub - frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP) 1, 仓库地址输入frappe的官…...
 
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
 
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
 
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
 
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
 
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
 
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
 
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
