Golang의 Defer 키워드

Go에서 defer 문은 근처 함수가 반환될 때까지 함수나 메서드 또는 익명 메서드의 실행을 지연시킵니다. 즉, 함수나 메서드를 지연시키는 인수는 즉시 평가되지만 근처 함수가 반환될 때까지 실행되지 않습니다. defer 키워드를 사용하여 지연된 메서드, 함수 또는 익명 함수를 만들 수 있습니다.

Golang의 Defer 키워드

통사론:

// Hàm
defer func func_name(parameter_list Type)return_type{
// Code
}

// Phương thức
defer func (receiver Type) method_name(parameter_list){
// Code
}

defer func (parameter_list)(return_type){
// code
}()

중요 참고 사항:

  • Go 언어에서는 동일한 프로그램 내에서 여러 개의 defer 문이 허용되며, 예제 2에서 볼 수 있듯이 LIFO(Last-In, First-Out) 순서로 실행됩니다.
  • defer 문에서는 defer 문이 호출될 때가 아니라 실행될 때 인수가 평가됩니다.
  • Defer 문은 파일이 더 이상 필요하지 않을 때 닫히도록 하거나, 채널을 닫거나, 프로그램의 문제를 포착하는 데 자주 사용됩니다.

이제 더 잘 이해하기 위해 예를 살펴보겠습니다.

예시 1:

// Chương trình Go minh họa
// khái niệm của lệnh defer
package main

import "fmt"

// Các hàm
func mul(a1, a2 int) int {

	res := a1 * a2
	fmt.Println("Result: ", res)
	return 0
}

func show() {
	fmt.Println("Hello!, Quantrimang.com")
}

// Hàm chính
func main() {

	// Gọi hàm mul() 
	// Tại đây hàm mul hoạt động
	// như một hàm bình thường
	mul(23, 45)

	// Gọi hàm mul()
	// Dùng từ khóa defer 
	// Hàm the mul() 
	// là hàm defer
	defer mul(23, 56)

	// Gọi hàm show() 
	show()
}

결과:

Result:  1035
Hello!, Quantrimang.com
Result:  1288

설명: 위의 예에서 mul() 과 show() 라는 두 개의 함수가 있습니다 . show() 함수는 일반적으로 main() 함수 에서 호출되는 반면 , mul() 함수는 두 가지 다른 방식으로 호출됩니다.

  • 먼저, mul 함수를 평소처럼(defer 키워드 없이) 호출합니다. 즉, mul(23, 45)는 함수가 호출될 때 실행됩니다(출력: 결과: 1035).
  • 두 번째로, defer 키워드를 사용하여 mul() 함수를 defer 함수로 호출합니다. 즉, defer mul(23, 56) 그러면 주변의 모든 메서드가 반환될 때 실행됩니다(출력: 결과: 1288).

예 2:

// Minh họa chương trình Go
// dùng nhiều lệnh defer, để minh họa chính sách LIFO 
package main

import "fmt"

// Các hàm
func add(a1, a2 int) int {
	res := a1 + a2
	fmt.Println("Result: ", res)
	return 0
}

// Hàm chính
func main() {

	fmt.Println("Start")

	// Nhiều lệnh defer
	// Triển khai theo thứ tự LIFO 
	defer fmt.Println("End")
	defer add(34, 56)
	defer add(10, 10)
}

결과:

Start
Result:  20
Result:  90
End

댓글 남기기

대구에서 TV 버리는 방법: 무료 방문수거와 대형폐기물 신고 정리

대구에서 TV 버리는 방법: 무료 방문수거와 대형폐기물 신고 정리

대구에서 TV를 버리는 방법을 정리했습니다. 폐가전 무상방문수거 신청, 구·군별 대형폐기물 신고, TV 받침대 처리와 배출 전 체크리스트를 확인하세요.

고양에서 TV 버리는 방법: 무료 수거와 대형폐기물 신고 비교

고양에서 TV 버리는 방법: 무료 수거와 대형폐기물 신고 비교

고양에서 TV를 버릴 때 1599-0903 무상방문수거, 새 제품 판매처 회수, 고양시 대형폐기물 신고를 크기·상태·비용별로 비교하고 흔한 오해와 배출 순서를 안내합니다.

울산에서 냉장고 버리는 방법: 무료 수거부터 대형폐기물 신고까지

울산에서 냉장고 버리는 방법: 무료 수거부터 대형폐기물 신고까지

울산에서 냉장고를 버릴 때 1599-0903 무료 방문수거, 새 제품 구매처 회수, 구·군 대형폐기물 신고를 비용과 조건별로 비교하고 안전한 배출 순서를 안내합니다.

전주에서 세탁기 버리는 방법: 무상수거 신청부터 배출까지

전주에서 세탁기 버리는 방법: 무상수거 신청부터 배출까지

전주에서 세탁기 버리는 방법을 정리했습니다. 일반·드럼세탁기 무상 방문수거 신청, 배출 장소, 준비사항, 제한 조건과 대형폐기물 대안을 확인하세요.

대구에서 자전거 버리는 방법: 대형폐기물 신고부터 배출까지

대구에서 자전거 버리는 방법: 대형폐기물 신고부터 배출까지

대구에서 자전거를 버릴 때 필요한 구·군 확인, 대형생활폐기물 신고, 수수료 확인, 배출번호 표시와 지정 장소 배출 방법을 가상 사례와 함께 정리합니다.

소파는 어떻게 버려야 하나?

소파는 어떻게 버려야 하나?

소파를 일반쓰레기로 버리면 안 되는 이유와 대형생활폐기물 신고, 수수료 확인, 안전한 운반 및 배출 방법을 단계별로 안내합니다.

폐형광등은 어디에 버려야 하나? 종류별 배출 장소와 깨졌을 때 처리법

폐형광등은 어디에 버려야 하나? 종류별 배출 장소와 깨졌을 때 처리법

폐형광등은 전용 수거함에 깨지지 않게 배출하는 것이 원칙입니다. 아파트·주민센터 등 수거 장소 찾기, 깨진 형광등 처리, LED와 백열전구 구분까지 실용적으로 정리했습니다.

수원에서 TV 버리는 방법: 무료 방문수거부터 대형폐기물 처리까지

수원에서 TV 버리는 방법: 무료 방문수거부터 대형폐기물 처리까지

수원에서 TV 버리는 방법을 정리했습니다. 무료 폐가전 방문수거 예약, 벽걸이 TV 철거, 준비물, 수거 불가 사례와 대형폐기물 처리 기준을 확인하세요.

부산에서 이불 버리는 방법: 구·군별 신고, 수수료, 배출 순서까지

부산에서 이불 버리는 방법: 구·군별 신고, 수수료, 배출 순서까지

부산에서 이불을 버릴 때 먼저 확인할 것은 거주 구·군의 대형폐기물 기준입니다. 연제구·해운대구·사상구 공식 기준의 차이, 신고·결제·배출 순서, 전기매트와 일반 이불의 구분, 실수하기 쉬운 점을 정리했습니다.

남양주에서 노트북 버리는 방법: 무상수거, 대형폐기물 신고, 개인정보 삭제까지

남양주에서 노트북 버리는 방법: 무상수거, 대형폐기물 신고, 개인정보 삭제까지

남양주에서 노트북 버리는 방법을 정리했습니다. 무상방문수거 조건, 대형폐기물 신고, 개인정보 삭제와 배터리 주의사항을 확인하세요.