누군가의 주요 차이점 os.Exit()
과 panic()
Go에서 실제로 사용되는 방법을 설명 할 수 있습니까?
답변
우선, “실제로 사용되는 방법”에 대한 질문이있을 때마다 Go 소스 코드 (또는 실제로는 충분히 큰 Go 코드베이스) 및 패키지 문서 를 검색 하는 것이 좋습니다. 답변을.
지금 os.Exit
과 panic
상당히 다르다. panic
프로그램 또는 그 부분이 복구 불가능한 상태에 도달했을 때 사용됩니다.
때
panic
와 같은 범위를 벗어 조각을 색인 또는 형의 주장을 실패로 런타임 오류를 암시 적으로 포함라고, 즉시 현재 함수의 실행을 중지하고 길을 따라 어떤 연기 기능을 실행되는 goroutine의 스택을 풀기 시작한다. 해제가 고 루틴 스택의 맨 위에 도달하면 프로그램이 종료됩니다.
os.Exit
복구 가능성이 없거나 지연된 정리 명령문을 실행하지 않고 프로그램을 즉시 중단하고 오류 코드 (다른 프로그램이 발생한 상황을보고하는 데 사용할 수 있음)를 반환해야 할 때 사용됩니다. 이것은 테스트에서 유용합니다.이 테스트가 실패한 후 다른 테스트도 실패한다는 것을 이미 알고있는 경우, 지금 종료하는 것이 좋습니다. 프로그램이 필요한 모든 작업을 수행하고 이제 종료해야 할 때 (예 : 도움말 메시지를 인쇄 한 후) 사용할 수도 있습니다.
대부분의 경우 사용하지 않으며 panic
( error
대신을 반환해야 함 ) os.Exit
테스트 및 빠른 프로그램 종료를 위해 일부 경우를 제외하고는 거의 필요하지 않습니다 .
답변
우선 os.Exit()
, 오류없이 정상적으로 프로그램을 종료하는 데 사용할 수 있으며 당황하지 않을 수 있습니다. 이것이 하나의 중요한 차이점입니다. 다른 하나는 어딘가에서 패닉이 포착되고 무시되거나를 사용하여 기록 될 수 있다는 것 recover
입니다.
그러나 잘못된 종료 코드에 대해 이야기하고 있다면 다음과 같이 가정 해 보겠습니다.
panic
뭔가 끔찍하게 잘못되었을 때 사용합니다 . 아마도 프로덕션으로 가기 전에 잡았어야 할 프로그래머 오류 일 것입니다. 이것이 스택을 인쇄하는 이유입니다.
os.Exit(errorCode)
원하는 경우 또는 이와 유사한 것을 사용하십시오 .
-
스크립팅 목적으로 프로그램의 종료 코드를 제어합니다.
-
예상되는 오류 (예 : 사용자 입력 오류)에 대해 순서대로 종료하기를 원합니다.
그래서 기본적으로 패닉은 당신을위한 것이고, 나쁜 종료 코드는 당신의 사용자를위한 것입니다.
답변
주요 차이점은 다음과 같습니다.
os.Exit
지연된 함수의 실행을 건너 뜁니다.- 를 사용
os.Exit
하면 종료 코드를 지정할 수 있습니다. panic
종료되는 동안 종료os.Exit
되지 않습니다. (다른 답변은 이것을 언급하지 않는 것 같습니다.)
지연된 함수를 실행해야하는 경우 선택의 여지가 없지만 panic
. (반면, 지연된 함수 실행을 건너 뛰려면을 사용하십시오 os.Exit
.)
void가 아닌 함수가 다음과 같이 정의 된 경우 :
- 함수에는 많은 분기가 포함되어 있습니다.
- 모든 분기는
return
또는 로 종료됩니다.panic
그럼 당신은 대체 할 수 없습니다 panic
와 os.Exit
“기능의 끝에 반환 누락”라고, 그렇지 않으면 컴파일러는 프로그램을 컴파일을 거부합니다. (Go는 여기에서 매우 멍청 log.Panic
하고 기능을 종료하지도 않습니다.)
다른 조건에서 :
panic
프로그래밍 논리 오류와 같이 실제로 유선이 발생할 때 사용 합니다.os.Exit
지정된 종료 코드로 즉시 종료를 원할 때 사용하십시오 .