在 Go 语言中,错误处理是通过返回错误值进行的,而不是像一些其他语言那样通过抛出和捕获异常。Go 语言有一个内置的接口类型 error,专门用于处理错误。

error 接口

error 是一个内置的接口,定义如下:

type error interface {
Error() string
}

任何实现了 Error() string 方法的类型都可以被视为一个 error 类型。这个 Error 方法返回描述错误的字符串。

创建错误

Go 语言的 errors 包提供了一个简单的创建 error 类型值的函数 New

err := errors.New("something went wrong")

这个 err 就是一个 error 类型的值,它的 Error 方法会返回 "something went wrong"

返回错误

在 Go 中,函数通常会返回一个 error 类型的值作为它的最后一个返回值。如果函数执行成功,这个 error 类型的值将会是 nil,否则它会包含一个描述错误的信息。例如:

func Div(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}

处理错误

如果一个函数返回一个 error 类型的值,你应该检查这个错误是否为 nil,然后据此决定怎么处理。例如:

result, err := Div(10, 0)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)

在这个例子中,如果 Div 函数返回了一个错误,程序会打印这个错误然后返回,否则它会打印结果。

错误处理是编写健壮和稳定的程序的重要组成部分,理解并适当地处理错误是每个 Go 开发者的必备技能。

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

【go语言】2.3.1 错误处理的基本概念的更多相关文章

  1. C语言学习008:标准错误

    在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...

  2. 解决Linux c语言运行时候“段错误 (核心已转储)”问题-采用gdb 解决

    编译没有警告,没有错误,运行就打印 段错误 (核心已转储) 网上找了一下,都是各种问题,都推荐用gdb 调试解决,咱也来趁机学习gdb一下.   gcc+gdb)输入命令行 运行 sudo apt-g ...

  3. Swift5 语言指南(十九) 错误处理

    错误处理是响应程序中的错误条件并从中恢复的过程.Swift为在运行时抛出,捕获,传播和操纵可恢复的错误提供了一流的支持. 某些操作无法保证始终完成执行或生成有用的输出.Optionals用于表示缺少值 ...

  4. (c语言编程)出现错误:null undeclared identifier

    原因:没有添加头文件#include <stdio.h> 添加完头文件后,错误消失

  5. Oracle在不同的语言环境结果to_date错误的问题

    我写了一个存储过程,它使用了功能,有一些功能to_date(dateFrom, 'yyyy/mm/dd').执行发现数据插入错误后,数据插入"0001/9/14". 感觉莫名其妙, ...

  6. Go语言学习笔记(10)——错误处理示例

    // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de ...

  7. GO语言异常处理02---返回错误

    package main import ( "errors" "fmt" "math" ) /*计算圆面积,同时返回[结果-错误对]*/ f ...

  8. C语言深度剖析学习错误点记录

    0. static修饰变量和函数 static修饰变量,1)限定作用域,本文件内.全局变量(自定义起,本文件前面要用需extern声明),局部变量函数内:2)生命周期,程序运行期间一直保存. stat ...

  9. C语言使用以及其它语言经常出的错误

    1. 计算优先级 i/*pi/(*p) //默认即用“()”花括号分隔即可 2.分号结束 ; ; if(i<j);{ //code } //分号结束必须看清楚 3.声明变量 ; ; //声明变量 ...

  10. C语言利用 void 类型指针实现面向对象类概念与抽象。

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

随机推荐

  1. cefsharp学习笔记

    环境:VS2015+cefsharp 57.0 全部代码如下: 1.要初始化,否则不能刷新 using System; using CefSharp; using System.Collections ...

  2. 2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。

    2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印.[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8. 福大大 答案2 ...

  3. wmi搜集一台计算机的硬件信息

    作用: Python搜集一台计算机的硬件信息,借助模块:wmi,这个模块只支持window操作系统. 安装: pip install wmi 导入: import wmi 实例 c = wmi.WMI ...

  4. LVDS_33 support

    在HR bank/HD bank中,支持LVDS的bank使用VCCO 3.3v供电,仅仅需要对端给过来的信号,满足标准的LVDS差模电压/共模电压的标准即可.如下截图:  限制: 仅能作为input ...

  5. 【GiraKoo】Github无法打开,导致无法下载Git安装包

    环境 Windows 11 原因 Git应用的安装程序在Github上,由于Github访问不稳定,导致无法下载. 对策 打开迅雷.将下载链接拷贝进去,利用迅雷的P2P技术,从其他网友处进行下载. 打 ...

  6. 【GiraKoo】C++多线程消息分发架构

    [开源需求]C++多线程消息分发架构 项目[gi_messager] 在多线程环境中,为每个线程提供独立的消息队列 MessageLoop.注:主线程默认自动创建消息队列. MessageLoopCe ...

  7. c++的前世今生

    C++ 语言是本贾尼·斯特劳斯特卢普 在1982 年发明的,早期版本被称为C with Classes,之后在1983年更名为C++. C++语言在发明后很快就获得了广泛的应用,由于其具有高效.灵活和 ...

  8. itextpdf5.5.13给pdf添加图片水印、添加文字水印(平铺)、添加文字水印(单个)、添加页眉、页脚、页眉事件、添加图片

    转载自简书用户:alex很累,感谢分享.原地址:https://www.jianshu.com/p/2b9c7a0300e4 一.相关工具类 1. Excel2Pdf.java (如代码不可用请查看原 ...

  9. Linq的所有用法(简单化)

    Linq 是一种强大的查询语言,可以过滤.排序和组合各种数据源.下面我们将讨论 Linq 的各种用法. Linq 的基本语法: Linq 可以应用于任何对象集合,以下是一个示例: var number ...

  10. IDEA中去除竖线

    IDEA中去除竖线 使用IDEA时突然多出了一条竖线 , 进入设置取消竖线