English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go 언어에서 defer 문은 지연됩니다함수또는 메서드나익명 메서드의 실행은 근처의 함수가 반환될 때까지 지연됩니다. 다시 말해, 지연 함수나 메서드 호출은 즉시 평가됩니다만, 근처의 함수가 반환될 때까지 실행됩니다. defer 키워드를 사용하여 지연된 메서드나 함수나 익명 함수를 생성할 수 있습니다.
문법:
// 함수 defer func func_name(parameter_list Type) return_type{ // Code } // 메서드 defer func (receiver Type) method_name(parameter_list){ // Code } defer func (parameter_list)(return_type){ // code }
주의사항:
Go 언어에서는 동일한 프로그램 내에서 여러 defer 문을 허용하며, LIFO(후입 선출)순서로 실행됩니다. 예제와 같이2와 같이 표시되었습니다.
defer 문에서는 defer 문이 실행될 때参数이 평가됩니다. 함수 호출 시가 아니라요.
defer 문은 일반적으로 파일을 처리한 후 파일을 닫거나 채널을 닫거나 프로그램 내의 긴급 상황을 잡는 데 사용됩니다.
이 개념을 설명하기 위해 예제를 사용해 보겠습니다:
예시1:
package main import "fmt" // 함수 func mul(a1, a2 int) int { res := a1 * a2 fmt.Println("Result: ", res) return 0 } func show() { fmt.Println("Hello!, ko.oldtoolbag.com Go 언어 기초 강의") } func main() { //mul() 함수 호출 //여기서 mul 함수의 동작은 //일반 함수와 같이 mul(23, 45) //mul() 함수 호출 //defer 키워드를 사용하여 //여기서 mul() 함수는 //은 지연 함수입니다 defer mul(23, 56) //show() 함수 호출 show() }
출력:
결과: 1035 Hello!, ko.oldtoolbag.com Go 언어 기초 강의 결과: 1288
사용 설명:위의 예제에서는 두 개의 이름을 가진mul()와show()함수의 함수 내에서 호출됩니다. 그리고show()함수는 일반적으로main()함수 내에서 호출하면서, 두 가지 다른 방식으로 호출합니다mul()함수:
먼저, 일반 함수와 같이 호출합니다mul함수, 즉 mul(23,45)을 함수 호출 때 실행합니다(출력: Result:1035)。
또한 defer 키워드를 사용하여mul()함수는 defer 함수라고 불리며, 즉 defer mul( 23,56),모든 주변 메서드가 반환되면 실행됩니다(출력: Result:1288)。
예시2:
package main import "fmt" // 함수 func add(a1, a2 int) int { res := a1 + a2 fmt.Println("Result: ", res) return 0 } func main() { fmt.Println("Start") //여러 지연 문 //LIFO 순서로 실행 defer fmt.Println("End") defer add(34, 56) defer add(10, 10) }
출력:
Start 결과: 20 결과: 90 끝