go语言的八股文

1.go语言触发异常的场景有哪些

运行时错误
1.空指针解引用:尝试访问一个未初始化的指针指向的内存,会导致程序崩溃并触发异常。
2.数组越界访问:试图访问数组中不存在的索引,比如数组长度为5,却尝试访问索引为10的元素。
3.除零错误:在执行除法运算时,如果除数为零,会触发异常。
4.类型断言错误:在进行类型断言时,如果断言的类型与实际类型不匹配,会触发异常。
程序逻辑错误
5.违反逻辑的分支:当程序到达了逻辑上不可能到达的分支时,可以调用panic函数来触发异常。
6.非法类型转换:尝试将一个类型转换为不兼容的类型,会导致程序崩溃并触发异常。
资源相关错误
7.文件或网络资源无法访问:在尝试打开文件或建立网络连接时,如果资源不可用或无法访问,可能会触发异常。
8.内存不足:当程序需要分配的内存超过了系统可用内存时,可能会触发异常。
并发编程中的错误
9.数据竞争:在并发编程中,多个goroutine同时访问和修改共享资源,而没有适当的同步机制,可能会导致数据竞争,从而触发异常。
10死锁:当两个或多个goroutine互相等待对方释放资源时,会导致死锁,程序无法继续执行,可能触发异常。
其他错误
11.函数执行失败:某些函数执行失败时,可能会返回一个错误值,而不是触发异常。但有些函数可能会在特定情况下触发异常,比如系统调用失败等。
12.第三方库或框架的错误:使用第三方库或框架时,可能会遇到一些未处理的错误情况,导致异常触发。

2.闭包是匿名函数的一种形式,它能够访问其定义时作用域中的变量。闭包的主要应用场景包括延迟执行、函数工厂、封装状态、回调函数、资源管理等。

package mainimport "fmt"// 定义一个返回闭包的函数
func createClosure(x int) func(int) int {// 定义匿名函数并返回return func(y int) int {return x + y}
}func main() {// 创建闭包adder := createClosure(5)// 调用闭包result := adder(3) // 输出: 8fmt.Println(result)
}
包的主要应用场景
  1. 延迟执行:闭包可以保存状态并在后续调用中使用,适合需要延迟执行的场景。
  2. 函数工厂:根据输入参数生成具有特定行为的函数。
  3. 封装状态:通过闭包封装变量,避免外部直接访问,增强封装性。
  4. 回调函数:在异步操作中作为回调函数使用,处理异步操作结果。
  5. 资源管理:管理资源的获取和释放,确保资源正确清理
理解和记忆方法
  1. 闭包是函数+环境:闭包不仅包含函数代码,还包含其定义时的环境,即可以访问外部函数的变量。
  2. 匿名函数特性:闭包是匿名函数的一种形式,可以作为值传递和返回。
  3. 状态保持:闭包可以保持其定义时的状态,即使外部函数已经执行完毕。
  4. 灵活的函数生成:通过闭包可以根据不同参数生成具有不同行为的函数。
package mainimport "fmt"// 函数工厂生成加法闭包
func makeAdder(x int) func(int) int {return func(y int) int {return x + y}
}
makeAdder 是一个函数,它接受一个整数 x 作为参数。
它返回一个匿名函数(闭包),这个匿名函数接受一个整数 y 并返回 x + y 的结果。
这个匿名函数可以访问 makeAdder 函数的参数 x,即使 makeAdder 函数已经执行完毕// 延迟执行和状态保持
func createGreeter(name string) func() string {return func() string {return "Hello, " + name + "!"}
}func main() {// 使用函数工厂add5 := makeAdder(5)fmt.Println(add5(3)) // 输出: 8// 延迟执行和状态保持greeter := createGreeter("张三")fmt.Println(greeter()) // 输出: Hello, 张三!// 闭包作为回调函数executeCallback(func(name string) string {return "Hello, " + name + "!"}, "李四")// 闭包管理资源fileProcessor := createFileProcessor("data.txt")fileProcessor(func(content string) {fmt.Println("文件内容:", content)})
}
记忆方法
  1. 闭包是包裹:把闭包想象成一个包裹,里面装着函数和它需要的环境。
  2. 延迟执行:闭包可以保存状态,延迟到需要的时候再执行。
  3. 函数工厂:通过闭包可以根据不同参数生成不同的函数,就像工厂生产不同产品。
  4. 封装状态:闭包可以隐藏变量,避免外部直接访问,就像把东西放在一个盒子里。

自学go语言笔记,希望我们可以一起学习!

 

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

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

相关文章

Ubuntu安装MySQL步骤及注意事项

一、安装前准备 1. 系统更新:在安装 MySQL 之前,确保你的 Ubuntu 系统软件包是最新的,这能避免因软件包版本问题导致的安装错误,并获取最新的安全补丁。打开终端,执行以下两条命令: sudo apt update sudo …

【愚公系列】《Python网络爬虫从入门到精通》054-Scrapy 文件下载

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…

2025最新︱中国信通院静态应用程序安全测试(SAST)工具能力评估,悬镜安全灵脉AI通过评估!

背景 研发运营安全(DevSecOps)从研发运营(DevOps)的概念延伸和演变而来,其核心理念是将安全贯穿从开发到运营的软件开发生命周期的每一个环节,在每个阶段自动实施安全措施,从而实现快速开发交付…

辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目

一、案例概述 浙江高跖医药科技股份有限公司是一家集“研、产、销”为一体的专业化药品持证企业。高跖医药自成立之初就建立并运行着一套相对完善的质量管理体系,涵盖了药品的研发、生产监管及销售。高跖医药于2022年选择实施了辛格迪的“委托生产质量管理协同解决…

【NLP 65、实践 ⑯ 基于Agent优化文章】

羁绊由我而起,痛苦也由我承担 —— 25.4.18 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt:用户传入的提示词(如 “请分析这篇作文的主题”),指导模型执行任务 client:Zhipu…

【锂电池SOH估计】BP神经网络锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)

目录 效果一览程序获取程序内容研究内容基于BP神经网络的锂电池健康状态估计研究摘要关键词1. 引言1.1 研究背景1.2 研究意义1.3 研究目标2. 文献综述2.1 锂电池SOH估计理论基础2.2 传统SOH估计方法2.3 基于BP神经网络的SOH估计研究进展2.4 研究空白与创新点3. BP神经网络原理3…

2025第十六届蓝桥杯python B组满分题解(详细)

目录 前言 A: 攻击次数 解题思路: 代码: B: 最长字符串 解题思路: 代码: C: LQ图形 解题思路: 代码: D: 最多次数 解题思路: 代码: E: A * B Problem 解题思路&…

第十二节:原理深挖-React Fiber架构核心思想

链表结构、时间切片(Time Slicing) 优先级调度实现(如用户输入>网络请求) React Fiber架构深度解析:从链表到优先级调度的革命性升级 一、Fiber架构核心设计思想 React Fiber是React 16的底层协调算法重构&#x…

你学会了些什么211201?--http基础知识

概念 HTTP–Hyper Text Transfer Protocol,超文本传输协议;是一种建立在TCP上的无状态连接(短连接)。 整个基本的工作流程是:客户端发送一个HTTP请求(Request ),这个请求说明了客户端…

MCU开发学习记录8 - 基本定时器学习与实践(HAL库) - 定时器DMA循环模式修改ARR值、定时器中断方式修改ARR值 - STM32CubeMX

名词解释: TRGO:Trigger Out General Purpose Output ARR:Auto-reload PSC:Prescaler CNT:Counter EGR:event generation register 本文将介绍基本定时器的概念、相关函数以及STM32CubeMX生成定时器的配置…

考研系列-计算机网络冲刺考点汇总(上)

写在前面 本文将总结王道408考研课程的计算机网络冲刺考点的第一章到第三章内容(计算机网络体系结构、物理层、数据链路层)。【图片较多,加载需要时间,可以提前打开加载~~】 第一章、计算机网络体系结构 注意:PCI(头部…

设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用

🔄 回顾 Day 13:桥接模式小结 在 Day 13 中,我们学习了桥接模式(Bridge Pattern): 用于将“抽象”与“实现”分离,适用于双维度变化场景(如图形类型 渲染方式)。它强调…

讯联桌面TV版apk下载-讯联桌面安卓电视版免费下载安装教程

在智能电视的使用过程中,一款好用的桌面应用能极大提升我们的使用体验。讯联桌面 TV 版就是这样一款备受关注的应用,它可以让安卓电视拥有更个性化、便捷的操作界面。今天,就为大家详细介绍讯联桌面 TV 版 apk 的免费下载安装教程。 一、下载…

Nginx知识点

Nginx发展历史 Nginx 是由俄罗斯程序员 Igor Sysoev 开发的高性能开源 Web 服务器、反向代理服务器和负载均衡器 ,其历史如下: 起源与早期开发(2002 - 2004 年) 2002 年,当时 Igor Sysoev 在为俄罗斯门户网站 Rambl…

uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱

解决思路 重新计算布局信息&#xff1a;在弹窗显示后重新调用 init 方法来计算组件的布局信息。使用 nextTick&#xff1a;保证在视图更新之后再进行布局信息的计算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…

腾讯一面-软件开发实习-PC客户端开发方向

1.自我介绍就不多赘述了 2. 请介绍一下你的项目经历 - 介绍了专辑鉴赏项目&#xff0c;前端使用html语言编写&#xff0c;后端基于http协议使用C语言进行网页开发。此外&#xff0c;还提及项目中涉及处理多线程问题以及做过内存池管理项目。 3. 项目中HTTP协议是使用库实现的…

[数据可视化] Datagear使用心得:从数据整备到可视化联动实践

Datagear 是一款功能强大的数据可视化与报表工具&#xff0c;在日常数据分析与展示过程中&#xff0c;能有效帮助用户构建交互式报表与面板。本文结合实际使用场景&#xff0c;总结了在 Datagear 平台上关于元数据整备、Board 面板设计、图表嵌入等方面的使用经验&#xff0c;供…

【音视频】MP4解封装

一、概述 实现了读取mp4文件&#xff0c;提取出h264和aac文件&#xff0c;可以直接播放 二、实现过程 准备文件 在build路径下添加mp4文件 同时&#xff0c;添加main函数参数&#xff0c;表示输入文件和输出文件 打开文件 打开输入文件&#xff0c;初始化格式上下文 char…

idea2024.1双击快捷方式打不开

idea2024.1突然双击快捷方式打不开&#xff0c;使用管理员运行也打不开 在安装的idea路径下的bin目录下双击打开idea.bat文件&#xff0c;要是打不开使用txt格式打开&#xff0c;打开后在最后一行加上pause&#xff0c;之后保存。 看看报错信息是不是有一个initializedExcept…

【错误记录】Windows 命令行程序循环暂停问题分析 ( 设置 “ 命令记录 “ 选项 | 启用 “ 丢弃旧的副本 “ 选项 | 将日志重定向到文件 )

文章目录 一、报错信息二、问题分析1、Windows 命令行的缓冲区机制2、命令记录设置 三、解决方案1、设置 " 命令记录 " 选项2、将日志重定向到文件 一、报错信息 Java 程序中 , 设置 无限循环 , 每次循环 休眠 10 秒后 , 再执行程序逻辑 , 在命令行中打印日志信息 ; …