Go에서 고루틴 스택 추적 덤프
Jay Singh
2022년8월23일
Go
Go Stack Trace

이상한 상황을 처리하는 관용적 접근 방식은 Go 프로그램에서 오류를 사용하는 것입니다. 오류는 소프트웨어에서 발생하는 대부분의 비정상적인 경우를 유발합니다.
그러나 드문 경우지만 소프트웨어는 비정상적인 상태로 인해 계속 실행할 수 없습니다. 이 상황에서 panic
은 프로그램을 일찍 종료할 수 있습니다.
함수에 panic
이 발생하면 함수 실행이 중지되고 지연된 함수가 실행되며 제어는 함수 호출자에게 돌아갑니다.
이 절차는 현재 고루틴의 모든 기능이 반환될 때까지 계속됩니다. 이때 프로그램은 종료되기 전에 panic
메시지를 출력한 다음 스택 추적을 출력합니다.
예제 프로그램을 구성할 때 이것은 더 명확해질 것입니다.
panic
을 사용하여 Go에서 고루틴 스택 추적 덤프
이 간단한 스크립트는 사람의 전체 이름을 인쇄합니다. fullName
함수는 사람의 전체 이름을 반환합니다.
이 메소드는 firstName
및 lastName
포인터에서 nil
값을 확인합니다. nil
인 경우 함수는 메시지와 함께 panic
신호를 보냅니다.
프로그램이 완료되면 이 메시지를 인쇄합니다.
package main
import (
"fmt"
)
func fullName(firstName *string, lastName *string) {
if firstName == nil {
panic("runtime error: first name cannot be nil")
}
if lastName == nil {
panic("runtime error: last name cannot be nil")
}
fmt.Printf("%s %s\n", *firstName, *lastName)
fmt.Println("returned normally from fullName")
}
func main() {
firstName := "Jay"
fullName(&firstName, nil)
fmt.Println("returned normally from main")
}
출력:
panic: runtime error: last name cannot be nil
goroutine 1 [running]:
main.fullName(0x405058?, 0xc000070f70?)
/tmp/sandbox885911142/prog.go:12 +0x114
main.main()
/tmp/sandbox885911142/prog.go:20 +0x35
이제 아래 예제는 내장 len
에서 제공하는 길이를 사용하여 슬라이스의 최종 요소에 액세스하려고 시도하는 일반적인 실수를 범합니다.
이것이 panic
을 유발할 수 있는 이유를 보여주기 위해 다음 코드를 실행하십시오.
package main
import (
"fmt"
)
func main() {
names := []string{
"Iron Man",
"Thor",
}
fmt.Println("My favorite superhero is:", names[len(names)])
}
출력:
panic: runtime error: index out of range [2] with length 2
goroutine 1 [running]:
main.main()
/tmp/sandbox2746930010/prog.go:12 +0x1b
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다