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'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!