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…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
