Day18-Go错误处理(上)

前言

在执行程序时,遇到系统错误或是网路异常是无可避免的,这时我们可能印出错误讯息并且让程序中断。
当然也不只系统上的错误,有时会有参数带入的错误,也必须印出错误讯息,
这篇我们要介绍 Go 语言错误处理的机制。

Error Interface

在 Go 语言中,将错误定义成一个 interface,而内建的 error interface 如下:

error interface {
   Error() string
}

在许多套件中的 function,都会再回传值中,带一个 error 回传,例如 strconv.Atoi,我们看一下这个 function 的组成:

func strconv.Atoi(s string) (int, error)

范例

那直接来看如何运用这个 error 回传值:

package main
 
import (
   "fmt"
   "strconv"
)
 
func main() {
   i, err := strconv.Atoi("0.5")
   if err != nil {
       fmt.Println("couldn't convert number:", err)
       return
   }
   fmt.Println("Converted integer:", i)
}

先来讲解 strconv.Atoi 的用途,我们带入一个字串,但必须是整数字串,听起来有点绕舌,举个例子,例如 "1",将其带入会输出整数1,以及error,当然如果没有错误,当然就是回传空值。

那以上面的例子,err 这个变数不为空值,这时你试着只印出 err,会是 invalid syntax ,恩...翻译成"无效的语法",如果在一个较大的专案,哪会知道错误发生在哪段,所以尽可能印出更详细的资讯,才比较能够追踪错误,
有时不见得是参数带错,而是程序和需求相左,所以这样如此一来也方便你 debug。

结语

今天介绍简单的错误语法运用,明天将会带来更实务上的运用,有关 defer 、 panic 、 recover 的使用。感谢各位读者今天的阅!


<<:  简报版-第四章-认识弱密码,不只123456、1234qwer

>>:  全端入门Day26_後端程序撰写之Django

[神经机器翻译理论与实作] 从头建立英中文翻译器 (VI)

前言 今天接着完成翻译任务实作的第二阶段-模型推论。 翻译器建立实作 重新评估翻译模型 上次由於输入...

Day 22 (Js)

1.宣告a 赋值 null var a = null 赋值:数字、"字串"、nu...

Day 13 漏洞分析 - Vulnerability Analysis (unix-privesc-check)

工具介绍 今天要介绍的是unix-privesc-check,它是一个在 Unix 系统上运行的脚本...

第42篇-学习 DNS Server - 2

今天学习进度还是 鸟哥的 Linux 私房菜 -- DNS Server /etc/nsswitch...

[day-5] 我与我的第一个程序,HelloWorld和背後的历史!

Hello World 的起源 通常我们在测试一个程序或是一个环境是否正常 会习惯使用 Hello ...