写点什么

【一 Go 到底】第二十五天 --- 内置函数和 Go 错误机制

作者:指剑
  • 2022-10-25
    重庆
  • 本文字数:1349 字

    阅读完需:约 4 分钟

【一Go到底】第二十五天---内置函数和Go错误机制

一、简介

1.1 常用内置函数

  1. len:用来求长度,例如 string,array,slice,map,channel

  2. new:用来分配内存,主要用来分配值类型,比如 int,float32,struct... 返回的是指针

  3. make: 用来分配内存,主要用来分配引用类型,如 chan,map,slice

1.2 案例演示

package main
import "fmt"
func main() {
num1 := 100 // num1 = 100, num1 Type = int, 地址 = 0xc000012098 fmt.Printf("num1 = %v, num1 Type = %T, 地址 = %v\n", num1, num1, &num1)
num2 := new(int) // num2 = 0xc0000120b8 (系统分配), num2 Type = *int, 地址 = 0xc000006030, num2指针的值为 = 0 // 此时 0xc000006030 是 值为0的地址 fmt.Printf("num2 = %v, num2 Type = %T, 地址 = %v, num2指针的值为 = %v\n", num2, num2, &num2, *num2) // 修改num2值 *num2 = 100 // 修改后的num2指针的值 = 100 fmt.Printf("修改后的num2指针的值 = %v\n", *num2)
}
复制代码

二、错误处理

2.1 为何需要处理错误

  1. 在默认情况下,发生错误后(panic),程序会自动退出(崩溃)

  2. 若想在发生错误后捕获到错误,并进行处理,保证程序继续运行。或在捕获到错误后,给个管理员提示(邮件)

2.2 go 的错误处理

  1. Go 语言追求简洁,Go 不支持传统的 try....catch......finally。

  2. Go 中引入的处理方式为: defer, panic, recover

  3. Go 中抛出一个 panic 异常,然后在 defer 中通过 recover 捕获,然后正常处理

  4. 进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加的健壮。

2.3 案例演示

package main
import ( "fmt")
func test() { // 使用defer + recover捕获和处理异常 defer func() { err := recover() // recover是内置函数,可以捕获到异常 // 语法2 -- > if err := recover();err != nil{} if err != nil { // 如果捕获到错误
fmt.Println("err = ", err) // 将错误信息发送给管理员 fmt.Println("发生错误...............") } }()
num1 := 10 num2 := 0 result := num1 / num2 fmt.Println("result = ", result)
}
func main() {
test() // err = runtime error: integer divide by zero // test函数运行成功...... fmt.Println("test函数运行成功......")}
复制代码

2.4 自定义错误

Go 程序中,也支持自定义错误,使用 errors.New 和 Ppanic 内置函数。


  1. errors.New(" 错误说明") ,会返回一个 error 类型的值,表示- -个错误

  2. panic 内置 函数,接收- -个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类型的变量,输出错误信息,并退出程序.

2.5 自定义错误案例

package main
import ( "errors" "fmt")
// 函数读取配置文件 init.conf 信息// 若文件名传入错误,则返回一个自定义错误func readConf(name string) (er error) { if name == "config.ini" { // 读取文件 return nil } else { // 返回自定义错误 return errors.New("读取文件错误") }}
func test2() { err := readConf("config.ini") if err != nil { // 如果读取文件发生错误,就输出错误,终止程序 panic(err) }
fmt.Println("test2 后面的代码继续执行")}
func main() {
test2() // test2 后面的代码继续执行 // main函数...... fmt.Println("main函数......")}


复制代码


发布于: 刚刚阅读数: 6
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS社区建设者,AWS学生大使,微软学生大使,阿里云签约作者,Info Q签约作者,CSDN博客专家,华为云云享专家,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第二十五天---内置函数和Go错误机制_Go_指剑_InfoQ写作社区