从零开始学GO ---- 错误处理

(一)红警2绿色辅助器Go源码实现 --(无线金钱,缩小冷确值) 红警2 辅助器 无线金钱 阅读详情

从零开始学GO ---- 错误处理

Go 语言通过内置的错误接口提供了非常简单的错误处理机制--------error类型接口。在这个接口类型的声明中只包含了一个方法Error。Error方法不接受任何参数,但是会返回一个string类型的结果。它的作用是返回错误信息的字符串表示形式。

type error interface {
    Error() string
}

使用error类型的方式通常是:

在函数声明的结果列表的最后,声明一个该类型的结果,同时在调用这个函数之后,先判断它返回的最后一个结果值是否“不为nil”。如果这个值“不为nil”,那么就进入错误处理流程,否则就继续进行正常的流程。

两个例子:

定义除法,如果除数为0,则附带返回error信息,否则就返回正常结果:

package main

import (
	"fmt"
)

// 定义一个 DivideError 结构
type DivideError struct {
	dividee int
	divider int
}

// 实现 `error` 接口
func (de *DivideError) Error() string {
	strFormat := `
    Cannot proceed, the divider is zero.
    dividee: %d
    divider: 0
`
	return fmt.Sprintf(strFormat, de.dividee)
}

// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
	if varDivider == 0 {   //如果除数是0,则返回error
		dData := DivideError{
			dividee: varDividee,
			divider: varDivider,
		}
		errorMsg = dData.Error()
		return
	} else {
		return varDividee / varDivider, ""
	}

}

func main() {

	// 正常情况
	if result, errorMsg := Divide(100, 10); errorMsg == "" {
		fmt.Println("100/10 = ", result)
	}  //   100/10 =  10
	
    // 当除数为零的时候会返回错误信息
	if _, errorMsg := Divide(100, 0); errorMsg != "" {
		fmt.Println("errorMsg is: ", errorMsg)
	}
	/*
	errorMsg is:
    	Cannot proceed, the divider is zero.
    	dividee: 100
    	divider: 0
	*/
}

写一个函数echo,如果参数的string不是空字符串,则打印,否则报错。

调用echo函数之后,都会把它返回的结果值赋给变量resp和err,并且总是先检查err的值是否“不为nil”,如果是,就打印错误信息,否则就打印常规的响应信息。

package main

import (
	"errors"
	"fmt"
)

func echo(request string) (response string, err error) {
	if request == "" {
		err = errors.New("empty request")
		return
	}
	response = fmt.Sprintf("echo: %s", request)
	return
}

func main() {
	for _, req := range []string{"", "hello!"} {
		fmt.Printf("request: %s\n", req)
		resp, err := echo(req)
		if err != nil {
			fmt.Printf("error: %s\n", err)
			continue
		}
		fmt.Printf("response: %s\n", resp)
	}
}
/*
request:
error: empty request
request: hello!
response: echo: hello!
*/
对于具体错误的判断,Go 语言中都有哪些惯用法?
  • 对于类型在已知范围内的一系列错误值,一般使用类型断言表达式或类型switch语句来判断;
  • 对于已有相应变量且类型相同的一系列错误值,一般直接使用判等操作来判断;
  • 对于没有相应变量且类型未知的一系列错误值,只能使用其错误信息的字符串表示形式来做判断。
从零开始学习 Go 语言 它以其简洁的语法、高效的并发支持和强大的标准库而闻名,非常适合开发高性能的服务器端应用、分布式系统和云计算工具。通过本文的学习,你可以掌握 Go 语言的基础语法、核心概念和开发工具,并能够使用 Go 语言开发实际项目。Go 语言以其简洁、高效和并发支持,成为现代软件开发的重要工具。通过本文的学习,你可以掌握 Go 语言的基础语法、核心概念和开发工具,并能够使用 Go 语言开发实际项目。无缓冲 Channel 的发送和接收操作是同步的,而有缓冲 Channel 的发送和接收操作是异步的。 阅读详情

相关推荐

Go语言基础:从零开始掌握Go的基本概念

在本篇博客中,我们从零开始掌握了Go语言的基本概念,包括变量、函数、结构体、接口、流程控制、包管理和错误处理等。我们还对比了Go和Java,帮助您更好地理解Go的优势。Go具有简洁的语法、原生的并发支持和快速的运行速度,使其成为云计算、微服务和高性能系统的理想选择。希望这篇博客能为您学习Go语言提供启发和帮助。

斌擎科技 393

golang 除数为0的各种情况

背景 以前一直以为除数为0会报错,但却遇到了一次例外,非但没有报错,甚至比较其他小数还成功了。 记录一下 测试 1. int 首先试了一下整型数的情况 func Test_divInt(t *testing.T) { var a, b int = 0, 0 ans := a / b fmt.Println(ans) } — FAIL: Test_divInt (0.00s) panic: runtime error: integer divide by zero [recovered] panic

AlphaTao的博客 2867

Go-xsec-checker是一款服务器安全检测的辅助工具由GO语言开发

xsec-checker是一款服务器安全检测的辅助工具,由GO语言开发,天生支持跨平台,同一份代码可以交叉编译出linux与windows平台下的可执行文件,且无任何库的依赖。

用Go语言写个外挂(上)

用Go语言写一个Windows的外挂 转 http://www.jianshu.com/p/1b8efb1bc3c0?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io# 本人在一家互联网金融公司上班,对于一家互联网金融公司,最基本的功能就是客户入金和出金,而出金的稳定性是很重要的,出金不畅容易导致投资人恐慌,...

weixin_33869377的博客 2676

外挂制作入门 (Delphi语言版)

带你入门,给你指出方向。大家因人而异,选择自己的求学之路。

单细胞分析(19)—— 单细胞转录组基因集评分方法

在单细胞RNA测序(scRNA-seq)分析中,基因集评分(Gene Set Scoring)是一项关键任务,能帮助研究者识别细胞功能状态

阅读文献,记录学习笔记 2439

[Go]go语言中的零值

go语言中的零值是变量没有做初始化时系统默认设置的值 var b bool // bool型零值是falsevar s string // string的零值是"" 以下六种类型零值常量都是nilvar a *intvar a []intvar a map[string] intvar a chan intvar a func(string) intvar a error // erro...

程序员老狼专注开发aigc或客服系统应用 726

《涨知识啦29》-DBR的工作原理及其在VCSEL中的作用

分布式布拉格(Distributed Bragg Reflection,简称DBR)反射镜是垂直腔面发射激光器(Vertical-Cavity Surface-Emitting Laser,简称VCSEL)的重要组成部分。典型的DBR反射镜是由1/4ni波长厚度的高折射率和低折射率材料交替组成(ni是该层的折射率)。其反射率取决于组成对数、边界条件以及折射率差。 图1 布拉格反射镜的工作原理 DBR反射镜的工作原理如图1所示。根据反射原理,当光从光疏介质n1射向光密介质n2(折射率n2>n1)时,反

simucal的博客 7983

golang中小数除以大数为0的坑

某次开发发现一个小数除以大数为0,看代码。 package main import "fmt" func main() { time := fmt.Sprintf("%.3f",119101423/1e9) fmt.Println(time) } 这段本地调试能打印出来数,但是在线上服务打印却是0。最后发现是float64的问题,在看代码。 package main import "fmt" func main() { time := fm

1246

Unreal 5 MetaHuman插件全流程:从安装到角色动画生成

本文详细介绍了Unreal 5中MetaHuman插件的全流程使用指南,从安装配置到角色动画生成。通过Quixel Bridge下载预设角色,利用面部捕捉技术赋予数字人模型生命力,并提供材质编辑、性能优化等进阶技巧,帮助用户快速创建照片级真实的虚拟角色。

weixin_29009081的博客 829

未隔离电源设备使用usb转串口调试导致串口模块爆炸烧坏事故记录

这个事就发生在前两天,我们公司的wifi模块被客户用到了咖啡机上,客户寄了一台整机给我们协助调试,还送了几包咖啡豆,本想着还能打个咖啡喝一喝的,但就在咖啡机刚寄过来第一天,就出事了。而这个事故的发生,竟然仅仅是因为同事接了个串口模块到电脑调试打印导致的。谁也想不到,这个3.3V的供电的wifi模块居然还有这么大的威力。直接将usb转TTL串口模块的转换芯片给爆开了,咖啡机也给弄坏了,据同事描述当时情况就只见到一片火光和一声巨响,状况比较惨烈,所幸的是笔记本电脑没有烧坏,但是直接给崩蓝屏了。 ...

fangye945a的博客 6192

【从零开始学习Go】Go 语言错误处理和并发(十二)

本文介绍了Go语言在错误处理和并发编程方面的独特设计。在错误处理方面,Go采用显式的error接口和多返回值机制,提倡通过返回错误值而非异常来处理问题,同时介绍了panic/recover机制的使用场景和最佳实践。在并发模型方面,Go通过goroutine实现轻量级协程,配合channel实现基于消息传递的并发编程,与C++基于线程和共享内存的模型形成鲜明对比。文章还详细介绍了defer延迟调用的用法,展示了其在资源管理中的重要作用,并与C++的RAII机制进行了比较。整体而言,Go通过这些设计提供了简洁高

XIOUR的博客 1825

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 491

Go语言入门指南:从零开始学Go

/ 基本函数// 多个参数类型相同,可以简写// 多返回值return 0, errors.New("除数不能为零")// 命名返回值return // naked return,自动返回命名返回值// 可变参数total := 0// 使用Go语言以其简洁、高效和强大的并发支持,成为现代后端开发的重要选择。环境搭建和第一个程序基础语法(变量、常量、数据类型、运算符)控制流程(条件、循环、switch)函数和方法数组、切片和Map结构体和接口错误处理。

好代码自己会说话,烂代码才需要注释来圆谎 4744

SYSU-MM01数据集评估避坑指南:从RGB/IR图像理解到Python评估脚本调优

本文详细解析了SYSU-MM01数据集在跨模态行人重识别(ReID)评估中的关键技巧与常见陷阱。从RGB/IR图像理解到Python评估脚本优化,提供了数据评估模式选择、single-shot/multi-shot差异分析、特征文件处理规范等实用指南,帮助研究者避开指标异常问题,提升评估效率与准确性。

weixin_29044713的博客 196

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

探索Go语言的无限可能:《从零开始学Go》

探索Go语言的无限可能:《从零开始学Go》 golang-bookA book on Go, contains fundamentals but also recipes项目地址:https://gitcode.com/gh_mirrors/gol/golang-book 在编程世界里,Go语言以其简洁、高效和并发性能优秀的特点,迅速成为开发者们的宠儿。为了帮助更多的初学者轻松入门Go语言,我们...

gitblog_00031的博客 466

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 706

Golang Microservices Go:从零开始构建生产级微服务架构的完整指南

Golang Microservices Go 是一个基于 Go 语言的微服务架构模板项目,它集成了 PSQL 数据库、Docker 容器化和 Cucumber 测试框架,采用 REST API 设计风格,并结合了 Gin Go 框架和 GORM ORM 工具,实现了分页功能和清晰的 Clean Architecture 设计模式。本文将带你从零基础开始,全面了解如何使用这个强大的模板构建生产级别

gitblog_00415的博客 947

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从零开始:Golang中JSON解析与生成的完全指南

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的对象字面量语法,但独立于语言,被广泛应用于不同编程语言的数据交换。JSON表示的数据结构简单清晰,主要包括对象(键值对的集合)和数组(值的有序序列)。对于更复杂的数据结构,如对象,我们通常定义一个与JSON结构对应的Golang结构体。通过在结构体字段上使用标签(tag),可以控制JSON字段如何映射到Golang结构体的字段。读取JSON文件。

walkskyer的博客 3202

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Golang入门完全指南:为什么它是云原生时代最值得学的语言?(Backend-NodeJS-Golang-Interview_QA)

想系统入门 Go 语言却不知道从哪下手?这份 **Golang 入门完全指南** 就是为你准备的。在云原生、微服务与后端开发岗位需求持续攀升的今天,Go(Golang)凭借简洁的语法、原生的并发模型和强悍的执行性能,成为越来越多开发者转型与进阶的首选语言。本文不仅会带你梳理 Go 语言入门路线与核心概念,还会结合开源仓库 **Backend-NodeJS-Golang-Interview_QA**

gitblog_00120的博客 890

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Go语言错误处理终极指南:10个技巧掌握健壮代码编写

Go语言错误处理是每个Gopher必须掌握的核心技能之一。在learning-golang项目中,我们汇集了丰富的Go学习资源,帮助开发者从新手到专家。本文将为您提供Go语言错误处理的完整指南,涵盖从基础到高级的10个实用技巧,助您编写更健壮的Go代码。😊 ## 为什么Go错误处理如此重要? Go语言采用显式错误处理机制,这与许多其他语言的异常处理方式截然不同。这种设计哲学强调**清晰性**

gitblog_00444的博客 802

实习第一周(Golang)

一,序 二,基础学习 三,环境安装 四,项目操练 GO111MODULE 五,此外附上我用过的一些资料

坚果的博客 2216

从零开始学习go开发

从零开始学go

weixin_47678667的博客 1052

Golang for Node.js Developers 项目推荐:从JavaScript到Go的无缝迁移指南

作为Node.js开发者,你是否曾面临这样的困境: - 想要学习Go语言提升技术栈,但面对全新的语法和概念感到无从下手? - 习惯了JavaScript的异步编程模式,不理解Go的并发模型如何工作? - 需要快速将Node.js项目迁移到Go,但缺乏系统的对比参考? 传统的Go学习资料往往从零开始,忽略了开发者已有的JavaScript知识背景,导致学习曲线陡峭,效率低下。 ## 解决方案:G...

gitblog_00525的博客 387

Go开发者路线图2025:从零开始掌握Golang开发

Go开发者路线图2025:从零开始掌握Golang开发 本文全面介绍了Go语言的发展历程、核心设计理念及其在现代软件开发中的广泛应用。从Go语言的诞生背景和设计哲学出发,详细解析了其简洁性、并发支持和高效编译等核心特性。文章还深入探讨了Go开发者路线图项目,为学习者提供清晰的学习路径,并展示了Go在云计算、微服务、网络编程、命令行工具、数据处理等关键领域的实际应用场景,帮助开发者从零开始系统掌握G...

gitblog_00008的博客 498
上一篇: 从零开始学GO ---- 结构体和方法
下一篇: 从零开始学GO ---- 接口
coding丁
博客等级 码龄9年 383粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值