>백엔드 개발 >Golang >golang 복구 후 반환하는 방법

golang 복구 후 반환하는 방법

(*-*)浩
(*-*)浩원래의
2019-12-17 10:43:174572검색

golang 복구 후 반환하는 방법

Recover t Try Catch 메커니즘은 없지만 Go에는 실제로 비슷한 복구 메커니즘이 있는데 이는 약간 약하고 사용법이 간단합니다. (권장 학습: 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는 객체 지향의 소멸자와 유사합니다. 패닉으로 인해 종료되더라도 이 함수가 종료될 때 실행됩니다. 그래서 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
}

기본 아이디어:

defer를 사용하여 return 전에 반환 변수(i 및 err로 미리 결정됨)의 값을 수정합니다

위 내용은 golang 복구 후 반환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.