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

go语言里的切片

package mainimport "fmt"func main() {// 创建一个长度为3,容量为5的整数切片var numbers = make([]int, 3, 8)// 打印初始状态printSlice(numbers) // 输出: len=3 cap=5 slice=[0 0 0]// 向切片添加元素numbers = append(numbers, 1, 2)// 再次打印,观察长度和容量的变化printSlice(numbers) // 输出: len=5 cap=5 slice=[0 0 0 1 2]// 再添加一个元素,超出原有容量numbers = append(numbers, 3)// 再次打印,观察容量的变化printSlice(numbers) // 输出: len=6 cap=10 slice=[0 0 0 1 2 3]/* 创建切片 numbers1 是之前切片的两倍容量*/numbers1 := make([]int, len(numbers), (cap(numbers))*2)/* 拷贝 numbers 的内容到 numbers1 */copy(numbers1,numbers)printSlice(numbers1)  /* 打印子切片从索引 2(包含) 到索引 5(不包含) */number3 := numbers[2:4]printSlice(number3)// 尝试访问超出切片范围的索引,这可能会导致 panic// 使用匿名函数和 defer 来处理可能的 panicfunc() {defer func() {if r := recover(); r != nil {fmt.Println("Recovered from panic:", r)}}()// 尝试访问超出切片范围的索引number4 := numbers[2:100]printSlice(number4)}()for i, v := range numbers1 {fmt.Printf("%d = %d\n", i, v)}for i, c := range "hello" {fmt.Printf("index: %d, char: %c\n", i, c)}map1 := make(map[int]float32)// 向 map1 中添加 key-value 对map1[1] = 1.0map1[2] = 2.0map1[3] = 3.0map1[4] = 4.0// 遍历 map1,读取 key 和 valuefor key, value := range map1 {// 打印 key 和 valuefmt.Printf("key is: %d - value is: %f\n", key, value)}// 遍历 map1,只读取 keyfor key := range map1 {// 打印 keyfmt.Printf("key is: %d\n", key)}// 遍历 map1,只读取 valuefor _, value := range map1 {// 打印 valuefmt.Printf("value is: %f\n", value)}}// printSlice 函数用于打印切片的长度、容量和内容
func printSlice(x []int) {fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

其中加入异常的说明:

你的观察是正确的。在 Go 中,尝试访问超出切片范围的索引确实会导致 panic。为了处理这种情况,我们可以使用 Go 的 recover 机制来捕获 panic。以下是如何修改代码以添加异常处理:

package mainimport ("fmt"
)func main() {// ... 前面的代码保持不变 .../* 打印子切片从索引 2(包含) 到索引 4(不包含) */number3 := numbers[2:4]printSlice(number3)// 使用匿名函数和 defer 来处理可能的 panicfunc() {defer func() {if r := recover(); r != nil {fmt.Println("Recovered from panic:", r)}}()// 尝试访问超出切片范围的索引number4 := numbers[2:100]printSlice(number4)}()fmt.Println("程序继续执行...")
}// printSlice 函数保持不变
func printSlice(x []int) {fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

解释:

  1. 我们将可能导致 panic 的代码包装在一个匿名函数中。
  2. 使用 defer 语句和另一个匿名函数来设置 panic 恢复机制。
  3. 在 defer 的函数中,我们使用 recover() 来捕获可能发生的 panic。
  4. 如果发生 panic,程序会打印出错误信息,但不会终止执行。
  5. 最后,我们添加了一条打印语句来显示程序继续执行。

这种方法允许我们优雅地处理潜在的 panic,而不会导致整个程序崩溃。请注意,虽然这种方法可以防止程序崩溃,但在实际应用中,我们通常应该避免访问超出切片范围的索引,而是通过适当的边界检查来预防这种情况的发生。

在生产环境中,你可能还想记录这个错误,或者根据你的应用需求采取其他适当的措施。

相关文章:

go语言里的切片

package mainimport "fmt"func main() {// 创建一个长度为3,容量为5的整数切片var numbers make([]int, 3, 8)// 打印初始状态printSlice(numbers) // 输出: len3 cap5 slice[0 0 0]// 向切片添加元素numbers append(numbers, 1, 2)// 再次打印&#xf…...

革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有

在这个日新月异的技术时代里,人工智能(AI)正以前所未有的速度改变着我们的生活与工作方式。作为行业内的先锋之一,我们非常高兴地宣布:经过团队不懈努力以及严格的测试与优化后,AIStarter 3.1.1新版现已震撼…...

【练习17】数组中的最长连续子序列

数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 题目分析:排序双指针 排序后,判断是否连续:后一个数-前一个数1 排序后,判断是否重复:后一个数-前一个数0 public class Solution {public int MLS (int[] arr)…...

2024 最适合 Web 开发者的 9 款 Chrome 扩展

随着 2024 年的进展,Chrome 扩展程序已成为 Web 开发人员工具包中不可或缺的一部分,在浏览器中提供强大的功能。在这篇文章中,我们将探讨今年在 Web 开发社区掀起波澜的 9 大 Chrome 扩展程序。 1.Lighthouse https://chromewebstore.google…...

React综合指南(二)

https://activity.csdn.net/creatActivity?id10787 #1024程序员节|征文# 21、 React中的状态是什么?它是如何使用的?? 状态是 React 组件的核心,是数据的来源,必须尽可能简单。基本上状态是确定组件呈现…...

XML\XXE漏洞基本原理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理XXE漏洞的相应信息 XML与XXE漏洞 这个东西有许多叫法,XML漏洞与XXE漏洞差不多都是一个东西。 这个漏洞是出现在XMl上的,然后可以叫他XXE注入漏洞。 XML简介 XML是一种数据的传输…...

uniapp小程序自定义聚合点

注&#xff1a; 1.默认的聚合点可以点击自动展示子级点位&#xff0c;但是自定义的聚合点在ios上无法触发markerClusterClick的监听&#xff0c;至今未解决&#xff0c;不知啥原因 2.ios和安卓展示的点位样式还有有差别 源码附上 <template><view class"marke…...

Spring Boot在线考试系统:JavaWeb技术的应用案例

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

Linux在服务器多节点下面如何快速查找日志

背景&#xff1a;最近在查找一个核心服务的后台日志&#xff0c;发现竟然部署了十几个节点&#xff0c;而且没使用ELK来做日志处理&#xff0c;所以查找日志非常不方便&#xff0c;不可能一个服务节点一个服务地找&#xff0c;所以通过同事间互相沟通找到一个方法&#xff0c;通…...

模数转换ADC0804的应用

【实验目的】 学习如何用单片机控制ADC0804芯片进行数模转换&#xff0c;掌握数码管动态扫描显示的原理。 【实验现象】 拧动AD旁边的电位器&#xff0c;会在数码管的前三位显示0-255之间的数值。 【实验说明】 动态扫描&#xff1a;就六位数码管显示123456举例说明如下&#x…...

CBAM中关于碳关税抵销

碳关税是欧盟为应对气候变化、防止 “碳泄漏” 而推出的一种边境调节机制。该机制的目的就是拉平进口产品与欧盟产品的碳成本&#xff0c;迫使其他国家建立碳市场或征收碳税&#xff0c;提高碳价&#xff0c;以达到和欧盟相同的水平&#xff0c;同时也有助于欧盟实现其气候目标…...

2.5 windows xp,ReactOS系统快速系统调用的实现

windows xp&#xff0c;ReactOS系统快速系统调用的实现 windows xp&#xff0c;ReactOS系统快速系统调用的实现 文章目录 **windows xp&#xff0c;ReactOS系统快速系统调用的实现**快速系统调用进入R0我们看MSR寄存器中的内容到底是啥子快速系统调用返回PspLookupKernelUserE…...

AI助力广交会,人工智能在制造业有哪些应用场景?

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到传统制造业中&#xff0c;为中国传统制造业注入了新的活力与变革&#xff0c;也为中国外贸的持续增长增添了更多底气。 在10月15日—19日举办的第136届中国进出口商品交易会上&…...

ElementPlus-Table表格-单选--TypeScript进阶篇

今天看个例子&#xff0c;这个例子是ElementPlus的组件Table表格下面的单选 <template> <el-table ref"singleTableRef" :data"tableData" highlight-current-row style"width: 100%" current-change"hand…...

三大智能体平台深度对比:字节Coze、百度AppBuilder、智谱智能体优劣解析

字节Coze智能体是一个多功能平台&#xff0c;具备丰富的功能和技能扩展能力。以下是它的一些核心功能和特性&#xff1a; 功能与技能 1. 插件功能 Coze智能体可以通过插件调用外部API&#xff0c;扩展智能体的能力。例如&#xff0c;它可以执行以下操作&#xff1a; 搜索信…...

【Flutter】基础入门:自定义Widget

在 Flutter 开发中&#xff0c;除了使用丰富的内置 Widgets 构建界面外&#xff0c;自定义 Widget 是让你的应用更灵活和个性化的重要手段。Flutter 允许你根据需求自定义 StatelessWidget 和 StatefulWidget&#xff0c;以实现复杂的 UI 组件或功能模块。 本教程将通过实例讲…...

程序员日志之DNF手游装备武器升级55级攻略

目录 传送门正文日志1、概要2、布甲3、皮甲4、轻甲5、重甲6、板甲7、武器 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; MyBatis框架&#xff08;精品&#xff09; M…...

Java项目-基于springcloud框架的分布式架构网上商城系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

ComfyUI_LayerStyle节点介绍

✨原作者地址 ComfyUI_LayerStyle是一个很强大的节点组&#xff0c;支持了大量图像处理的基础节点。这篇是简单搬运和翻译原作者的内容&#xff0c;方便大家更方便快速的了解这个节点的价值。 https://github.com/chflame163/ComfyUI_LayerStyle ✨节点描述 节点根据功能分…...

SQL Injection | SQL 注入 —— 时间盲注

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;时间盲注 —— 理论篇 时间盲注&#xff08;Time-Based Blind SQL Injection&#xff09;是一种常见的 SQL 注入技术&#xff0c;适用于那些页面不会返回错误信息&#xff0c;只会回…...

最新开发项目H5商城小程序源码系统 带源代码安装包以及搭建部署教程

系统概述 在当今数字化迅猛发展的时代&#xff0c;电子商务已成为企业拓展市场、提升品牌影响力的重要手段。H5商城小程序作为一种跨平台、轻量级的应用形式&#xff0c;凭借其无需下载安装、即用即走的特性&#xff0c;迅速赢得了广大用户的青睐。为了满足企业对高质量H5商城…...

5大绝招揭秘:Cursor如何让RESTful API开发效率提升300%?

5大绝招揭秘:Cursor如何让RESTful API开发效率提升300%? 在当今快速迭代的软件开发世界中&#xff0c;高效构建RESTful API已成为开发者的必备技能。今天&#xff0c;我们将为大家介绍一款强大的AI辅助工具——Cursor&#xff0c;它能让您的API开发事半功倍。 Cursor Compos…...

鸿蒙开发,在 ArkTS 中,如何使用 Column 实现垂直居中对齐

面向万物互联时代&#xff0c;华为提出了“一次开发多端部署、可分可合自由流转、统一生态原生智能”三大应用与服务开发理念。针对多设备、多入口、服务可分可合等特性&#xff0c;华为提供了多种能力协助开发者降低开发门槛。HarmonyOS基于JS/TS语言体系&#xff0c;构建了全…...

红日安全vulnstack (一)

目录 环境搭建 本机双网卡 Kali IP 靶机IP Web GetShell 前期信息收集 Yxcms后台模板 Getshell PHPMyAdmin日志 Getshell into outfile写入一句话 X phpmyadmin 日志写入一句话 后渗透 MSF 生成木马上线 提取用户hash值 **hash**加密方式 MSF权限Shell至CS CS …...

为什么SSH协议是安全的?

SSH的传输层协议&#xff08;Transport Layer Protocol&#xff09;和用户鉴权协议&#xff08;Authentication Protocol&#xff09;确保数据的传输安全&#xff0c;这里只介绍传输层协议&#xff0c;是SSH协议的基础。 本文针对SSH2协议。 1、客户端连接服务器 服务器默认…...

主键 外键

主键 外键 在关系型数据库中&#xff0c;主键&#xff08;Primary Key&#xff09;和外键&#xff08;Foreign Key&#xff09;是用于维护数据完整性和建立表之间关系的重要概念。 主键&#xff08;Primary Key&#xff09; 定义: 主键是一个或多个列的组合&#xff0c;其值能…...

G - Road Blocked 2

G - Road Blocked 2 思路 只有当一条边是从 1 1 1到 n n n的所有最短路构成的图的桥时&#xff0c;去掉这条边&#xff0c;最短路才会变大 所以就可以用最短路加tarjan解决这道题了 怎么判断一条边是否可以构成最短路呢&#xff0c;比如求 1 1 1到 n n n的最短路&#xff0…...

R语言绘制Venn图(文氏图、温氏图、维恩图、范氏图、韦恩图)

Venn图&#xff0c;又称文氏图&#xff0c;标题中其他名字也是它的别称&#xff0c;由封闭圆形组成&#xff0c;代表不同集合。圆形重叠部分表示集合交集&#xff0c;非重叠处为独有元素。在生物学、统计学等领域广泛应用&#xff0c;可展示不同数据集相似性与差异&#xff0c;…...

【Vue.js】vue2 项目在 Vscode 中使用 Ctrl + 鼠标左键跳转 @ 别名导入的 js 文件和 .vue 文件

js 文件跳转 需要安装插件 Vetur 然后需要我们在项目根目录下添加 jsconfig.json 配置&#xff0c;至于配置的作用&#xff0c;可以参考我的另外一篇博客&#xff1a; 【React 】react 创建项目配置 jsconfig.json 的作用 它主要用于配置 JavaScript 或 TypeScript 项目的根…...

NVM配置与Vue3+Vite项目快速搭建指南

本文目录 1、配置环境1.1 NVM1、nvm常用命令 1.2 Mac配置环境1、安装nvm 1.3 Window配置环境1、安装nvm 2、 项目搭建2.1 项目依赖2.2 安装依赖2.3 配置1、别名配置2、创建样式及图片文件夹3、路由 2.4 项目搭建效果2.5 项目结构 在当今快速发展的前端技术领域中&#xff0c;掌…...