厚土Go学习笔记 | 31. 错误 通常函数会返回一个error值来判断是否出错
时间:2022-05-06
本文章向大家介绍厚土Go学习笔记 | 31. 错误 通常函数会返回一个error值来判断是否出错,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
go程序使用 error 值来表示错误判断。通常函数会返回一个 error 值,我们用来判断程序运行是否出错。所以在 go 程序中,你总是能见到很多 if err != nil
语句。
与 fmt.Stringer 类似,error 类型是一个内建接口。
type error interface {
Error() string
}
函数一般判断是否需要错误处理的方式。
i, err := strcov.Atoi("42")
if err != nil {
}
我们可以自定义 error 发生时,显示的输出格式。
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v --> %s", e.When, e.What)
}
func run() error {
return &MyError{
time.Now(),
"it didn't work",
}
}
func main() {
if err := run(); err != nil {
fmt.Println(err)
}
}
运行结果
at 2017-08-19 14:14:39.9021933 +0800 CST --> it didn't work
可知,error 为 nil 时表示成功,error 为非 nil 时,表示有错误。
前面有一个 Sqrt 函数的练习,这里修改一下,可以返回 error 值。这样当 Sqrt 接收到一个不支持的负数时,就返回非 nil 的错误值。
代码中需要创建一个新类型
type ErrNegativeSqrt float64
为此类型实现一个 Error() 方法
func (e ErrNegativeSqrt) Error() string
当 error 发生时,返回 cannot Sqrt negative number: -2
代码示例
package main
import (
"fmt"
)
type ErrNegativeSqrt float64
func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number:%vn", float64(e))
}
func Sqrt(x float64) (float64, error) {
if x >= 0 {
return 0, nil
}else{
return x, ErrNegativeSqrt(x)
}
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}
运行结果
0 <nil>
-2 cannot Sqrt negative number:-2
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 初探 Spark ML 第一部分
- Ansible Facts 变量详解 添加用户账号Ansible 配置清单Inventory
- Ansible playbook 编程
- 前端工程师自检清单73答
- Ansible playbook Vault 加密
- MySQL主从复制
- Ansible Jinja2 模板使用
- 自动化运维工具Ansible之Tests测验详解
- 自动化运维工具Ansible之Roles角色详解
- 全网最酷南极路线图
- 误删cloudera-scm-agent恢复
- 自动化运维工具Ansible之LNMP实践环境部署
- 如何在Windows下使用NCL
- Python基础绘图教程(一)
- 如何通过VMware安装Linux CentOS 7.7系统