English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 튜토리얼

Golang 제어 문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 병행

Golang 예외(Error)

Golang 기타Miscellaneous

Go 언어 Panic

Panic은 오류 상황을 처리하는 메커니즘입니다. 긴급 상황은 함수 실행을 중지할 수 있습니다. 함수가 panic을 호출할 때, 그 실행이 중지되고 관련 지연 함수로 컨트롤 플로우가 이동합니다.

이 함수의 호출자도 종료되고, 호출자의 지연 함수도 실행됩니다(있는 경우). 이 과정은 프로그램이 끝날 때까지 지속됩니다. 지금 오류 상황을 보고합니다.

이 종료 시퀀스는 panic이라고 불리며, 내장 함수 recover로 제어될 수 있습니다。

panic示例1:

package main
import "os"
func main() {
	
	_,/tmp/file)
	if err != nil {
		panic(err)
	}
}

输出:

panic: Error Situation
goroutine 1 [running]:
main.main()
/Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39

panic示例2

package main
import "fmt"
func main() {
	fmt.Println("Calling x from main.")
	x()
	fmt.Println("Returned from x.")
}
func x() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("Recovered in x", r)
		}
	}()
	fmt.Println("Executing x...")
	fmt.Println("Calling y.")
	y(0)
	fmt.Println("Returned normally from y.")
}
func y(i int) {
	fmt.Println("Executing y....")
	if i > 2 {
		fmt.Println("Panicking!")
		panic(fmt.Sprintf("%v", i))
	}
	defer fmt.Println("Defer in y", i)
	fmt.Println("Printing in y", i)
	y(i + 1)
}

输出:

Calling x from main.
Executing x...
Calling y.
Executing y....
Printing in y 0
Executing y....
Printing in y 1
Executing y....
Printing in y 2
Executing y....
Panicking!
Defer in y 2
Defer in y 1
Defer in y 0
Recovered in x 3
x에서 돌아왔습니다.