Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang recover后怎么返回

golang recover后怎么返回

(*-*)浩
(*-*)浩asal
2019-12-17 10:43:174538semak imbas

golang recover后怎么返回

recover

虽然没有try catch机制,Go其实有一种类似的recover机制,功能弱了点,用法很简单:                        (推荐学习:go

package main
import "fmt"
func main() {
fmt.Printf("%d\n", cal(1, 2))
fmt.Printf("%d\n", cal(5, 2))
fmt.Printf("%d\n", cal(5, 0))
fmt.Printf("%d\n", cal(9, 2))
}
func cal(a, b int) int {
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
return a / b
}

首先,大家得理解defer的作用,简单说defer就类似于面向对象里面的析构函数,在这个函数终止的时候会执行,即使是panic导致的终止。

所以,在cal函数里面每次终止的时候都会检查有没有异常产生,如果产生了我们可以处理,比如说记录日志,这样程序还可以继续执行下去。

package main

import (
        "errors"
        "fmt"
        "math"
)

func main() {
        _, err := IntFromInt64(math.MaxInt32 + 1)
        if err != nil {
                fmt.Println(err)
        }
}

func ConvertInt64ToInt(i64 int64) int {
        if math.MinInt32 <= i64 && i64 <= math.MaxInt32 {
                return int(i64)
        }
        panic("can&#39;t convert int64 to int")
}

func IntFromInt64(i64 int64) (i int, err error) {//这里
        defer func() {
                if err2 := recover(); err2 != nil {
                        i = 0//这里
                        err = errors.New("ttt")//这里
                }
        }()
        i = ConvertInt64ToInt(i64)
        return i, nil
}

主要思想:return之前利用defer修改返回变量(提前确定为i和err)的值

Atas ialah kandungan terperinci golang recover后怎么返回. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:golang read会阻塞么Artikel seterusnya:golang判断tcp是否断开的方法