Golang学习笔记_20——error
Golang学习笔记_17——方法
Golang学习笔记_18——接口
Golang学习笔记_19——Stringer
文章目录
- error
- 1. 接口
- 2. 创建
- 3. 自定义错误
- 4. 处理错误
- 5. 实现`Error`接口
- 源码
error
在Go语言中,error 是一个内建的接口类型,用于表示和处理错误情况。它是Go语言错误处理机制的核心。下面将详细讲解Go语言中 error 的相关概念和用法。
1. 接口
error 接口非常简单,仅包含一个方法
type error interface {Error() string
}
2. 创建
import ("errors""fmt"
)func demo_1() {err := errors.New("something went wrong")if err != nil {fmt.Println("Error:", err)}
}
测试方法
func Test_demo_1(t *testing.T) {demo_1()
}
输出结果
=== RUN Test_demo_1
Error: something went wrong
--- PASS: Test_demo_1 (0.00s)
PASS
3. 自定义错误
type MyError struct {Code intMessage string
}func (e *MyError) Error() string {return fmt.Sprintf("code:%d \nmessage:%s", e.Code, e.Message)
}func demo_2() {err := &MyError{Code: 1,Message: "something went wrong",}fmt.Println(err)
}
测试方法
func Test_demo_2(t *testing.T) {demo_2()
}
输出结果
=== RUN Test_demo_2
code:1
message:something went wrong
--- PASS: Test_demo_2 (0.00s)
PASS
4. 处理错误
在自定义错误代码的基础上,实现错误处理
func demo_3(err *MyError) {if err != nil {fmt.Println("Error:", err)} else {fmt.Println("No error")}
}
测试方法
func Test_demo_3(t *testing.T) {type args struct {err *MyError}tests := []struct {name stringargs args}{{name: "error",args: args{err: &MyError{Code: 1,Message: "something went wrong",},},},{name: "no error",args: args{err: nil,},},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {demo_3(tt.args.err)})}
}
输出结果
=== RUN Test_demo_3
=== RUN Test_demo_3/error
Error: code:1
message:something went wrong
=== RUN Test_demo_3/no_error
No error
--- PASS: Test_demo_3 (0.00s)--- PASS: Test_demo_3/error (0.00s)--- PASS: Test_demo_3/no_error (0.00s)
PASS
5. 实现Error接口
// 定义一个表示文件错误的结构体
type FileError struct {FileName stringErrMsg string
}// 实现 error 接口的 Error() 方法
func (e *FileError) Error() string {return fmt.Sprintf("file error: %s - %s", e.FileName, e.ErrMsg)
}func demo_4() {err := &FileError{FileName: "example.txt",ErrMsg: "failed to open file",}fmt.Println(err)
}
测试方法
func Test_demo_4(t *testing.T) {demo_4()
}
输出结果
=== RUN Test_demo_4
file error: example.txt - failed to open file
--- PASS: Test_demo_4 (0.00s)
PASS
源码
// error_demo.go 文件
package error_demoimport ("errors""fmt"
)func demo_1() {err := errors.New("something went wrong")if err != nil {fmt.Println("Error:", err)}
}type MyError struct {Code intMessage string
}func (e *MyError) Error() string {return fmt.Sprintf("code:%d \nmessage:%s", e.Code, e.Message)
}func demo_2() {err := &MyError{Code: 1,Message: "something went wrong",}fmt.Println(err)
}func demo_3(err *MyError) {if err != nil {fmt.Println("Error:", err)} else {fmt.Println("No error")}
}// 定义一个表示文件错误的结构体
type FileError struct {FileName stringErrMsg string
}// 实现 error 接口的 Error() 方法
func (e *FileError) Error() string {return fmt.Sprintf("file error: %s - %s", e.FileName, e.ErrMsg)
}func demo_4() {err := &FileError{FileName: "example.txt",ErrMsg: "failed to open file",}fmt.Println(err)
}
// error_demo_test.go 文件
package error_demoimport ("errors""testing"
)func Test_demo_1(t *testing.T) {demo_1()
}func Test_demo_2(t *testing.T) {demo_2()
}func Test_demo_3(t *testing.T) {type args struct {err *MyError}tests := []struct {name stringargs args}{{name: "error",args: args{err: &MyError{Code: 1,Message: "something went wrong",},},},{name: "no error",args: args{err: nil,},},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {demo_3(tt.args.err)})}
}func Test_demo_4(t *testing.T) {demo_4()
}
相关文章:
Golang学习笔记_20——error
Golang学习笔记_17——方法 Golang学习笔记_18——接口 Golang学习笔记_19——Stringer 文章目录 error1. 接口2. 创建3. 自定义错误4. 处理错误5. 实现Error接口 源码 error 在Go语言中,error 是一个内建的接口类型,用于表示和处理错误情况。它是Go语言…...
基于Vite+TS初始项目 | 不断更新
1 创建项目 1.1 初始化项目 # 创建项目 pnpm create vite# 使用vue-ts模板创建项目 pnpm create vite xyz-vue-app-ts --template vue-ts1.2 添加ts类型检查命令 添加 "type-check" 类型检查命令 {"name": "xyz-vue-app-ts-test","scri…...
R语言装环境Gcc报错以及scater包的安装
error: ‘timespec_get’ has not been declared in ‘::’ 80 | using ::timespec_get; 在conda 的虚拟环境中升级gcc的版本 conda install -c conda-forge gcc11 gxx11终极方法,在R的最新版本和环境下装啥都能成功!! 比如beyondcell的方法…...
关于量子神经网络的思考
其实在写这篇文章之前想了很多,主要是想法太超前,有可能颠覆未来机器智能行业甚至是影响世界。 1、计算机的历史 计算机的历史可以追溯到20世纪中叶,最早的电子计算机如ENIAC和EDVAC采用了冯诺依曼架构(John von Neumann Archit…...
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,第8篇时只回答了注册中心的工作原理的内容,面试官的第二个问题还没回答,今天再来讲讲各个注册中心的原理,以及区别,最后如何进行选型 上一篇文章:如何设计一个注册…...
使用 Conda创建新的环境遇到的问题
下载速度很慢 1、更新 conda update -n base -c defaults conda2、清理缓存 conda clean --all解决方法 方法 1:关闭严格的渠道优先级 检查是否开启了严格渠道优先级: conda config --show channel_priority 如果返回 strict,说明启用了严…...
Flutter项目开发模版,开箱即用(Plus版本)
前言 当前案例 Flutter SDK版本:3.22.2 本文,是由这两篇文章 结合产出,所以非常建议大家,先看完这两篇: Flutter项目开发模版: 主要内容:MVVM设计模式及内存泄漏处理,涉及Model、…...
Spring Boot + Jasypt 实现application.yml 属性加密的快速示例
Jasypt(Java Simplified Encryption)是一个专为Java应用程序设计的开源加密库,旨在简化加密和解密流程,保护敏感数据如密码、API密钥等。 jasypt-spring-boot-starter允许开发者在Spring Boot应用中轻松地实现加密和解密功能。 本篇介绍使用 jasypt-spring-boot-starter 以…...
arcgisPro加载CGCS2000天地图后,如何转成米单位
1、导入加载的天地图影像服务,一开始是经纬度显示的。 2、右键地图,选择需要调整的投影坐标,这里选择坐标如下: 3、点击确定后,就可以调整成米单位的了。 4、切换后结果如下: 如有需要,可调整成…...
多模态论文笔记——GLIDE(DALL·E 2模型核心部件)
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍了OpenAI的DALLE 2模型中重要的组成部分,用于图像生成的GLIDE模型及其论文。 文章目录 论文背景扩散模型(Diffusion Models&…...
mybatisPlus动态sql语句 ${ew.sqlSegment}
mybatis-plus的${ew.sqlSegment},${ew.sqlSelect},${ew.customSqlSegment} ew是mapper方法里的Param(Constants.WRAPPER) Wrapper queryWrapper对象 简答介绍: ${ew.sqlSelect}:拼接select SQL主体 Select("select ${ew.…...
【工具】HTML自动识别用户正在讲话 以及停止讲话
【工具】HTML自动识别用户正在讲话 以及停止讲话 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>语…...
小程序与内嵌网页的数据通信
小程序与内嵌网页的数据通信 前言 微信小程序提供了web-view组件,允许开发者在小程序中嵌入网页。然而,由于小程序和网页运行在不同的环境中,它们之间的通信就需要依赖特定的机制来实现。然而我们日常的需求中,很多的时候都涉及…...
Android - NDK:编译可执行程序在android设备上运行
在android开发中,调试时会把C代码直接编译成可执行程序,运行在android设备上以确认其功能是否正常。 1、基于NDK编译可执行文件 2、push到 /data/local/tmp目录下 3、设置权限,执行。 ndk工程中build.gradle设置 groovy plugins {id com.a…...
快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS …...
shell技能树-扩展变量
扩展变量是指在shell脚本中用于实现条件判断和变量操作的特殊语法。 表格总结: 前三个 存在或者非空时,优先使用待测变量,否则使用默认值(或报错)。 最后一个 存在或者非空时,优先使用默认值,…...
基于RedHat9部署WordPress+WooCommerce架设购物网站
系统版本信息:Red Hat Enterprise Linux release 9.2 (Plow) WordPress版本信息:wordpress-6.6.2-zh_CN WooCommerce版本信息:woocommerce.9.5.1 环境架构:LNMP(RedHat9nginx1.20.1PHP 8.0.27MySQL8.0.30) …...
LabVIEW瞬变电磁接收系统
利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程,解决了传统仪器在信噪比低和抗干扰能力差的问题,实现了高精度的数据采集和处理,特别适用于地质勘探等领域。 项目背景: 瞬变电磁法是探…...
Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
历史文章(文章累计530) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…...
Linux系统扩容根 (/) 文件系统空间
[rootlocalhost ~]# df -Th / # 查看当前根文件系统使用情况 [rootlocalhost ~]# lsblk # 查看设备的挂载情况 [rootlocalhost ~]# lvdisplay # 查看逻辑卷使用情况 # 操作磁盘分区表 [rootlocalhost ~]# fdisk /dev/nvme0n1 欢迎使用 fdisk (util-linux 2.37.4…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
