Golang 함수의 실행 순서와 목적 defer

WBOY
풀어 주다: 2024-06-05 13:10:57
원래의
609명이 탐색했습니다.

defer 함수는 Go 언어에서 함수가 반환될 때까지 함수 호출의 실행을 지연하고 LIFO(후입선출) 순서로 호출하는 데 사용됩니다. 그 용도에는 리소스 해제, 로깅 및 예외 복구가 포함됩니다. 나중에 지연된 함수는 첫 번째 지연된 함수보다 먼저 호출됩니다.

Golang 函数 defer 的执行顺序和用途

Go 언어의 defer 함수 실행 순서 및 목적

defer 함수

defer는 Go 언어의 고유 키워드로, 함수 호출을 Execulated before로 연기할 수 있습니다. 함수가 반환됩니다. 함수가 반환되면 지연된 함수는 LIFO(후입선출) 순서로 호출됩니다. defer 是 Go 语言中一个独特的关键字,它可以将函数调用推迟到函数返回之前执行。当函数返回时,被延迟的函数按后进先出 (LIFO) 的顺序调用。

defer 的用途

defer

    defer
  • defer 사용은 주로 다음 시나리오에서 사용됩니다.
  • 리소스 해제(정리 작업):
  • 파일 핸들과 같은 할당된 리소스를 해제하기 전에 해제하는 데 사용됩니다. 함수 종료, 데이터베이스 연결 또는 잠금.
  • 로깅:
  • 함수가 반환될 때 특정 이벤트나 오류를 기록하는 데 사용됩니다.

예외 복구: 예외를 처리하고 정리 작업을 수행하는 데 사용됩니다.

defer

의 실행 순서 지연된 함수 호출은 함수가 반환될 때 후입선출 순서로 실행됩니다. 이는 나중에 지연된 함수가 첫 번째 지연된 함수보다 먼저 호출된다는 것을 의미합니다.

실제 사례: 파일 핸들 해제

package main

import (
    "fmt"
    "os"
)

func main() {
    // defer 语句将函数 os.File.Close() 调用推迟到 main() 函数返回之前执行。
    f, err := os.Open("myfile.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    // 使用 defer 可以确保文件句柄在函数返回时始终被关闭。
    fmt.Println("File opened successfully.")
}
로그인 후 복사
출력:

    File opened successfully.
    로그인 후 복사
  • 기타 예:

  • 로깅:

    defer fmt.Println("Function completed.")
    로그인 후 복사

🎜 예외 복구: 🎜🎜
func safeOperation() (result, err error) {
  // ...省略业务代码...
  if err != nil {
      // 如果操作失败,记录错误并恢复。
      defer func() {
          fmt.Println("Operation failed with error:", err)
      }()
      return nil, err
  }
  // 操作成功,返回结果。
  return result, nil
}
로그인 후 복사
🎜🎜

위 내용은 Golang 함수의 실행 순서와 목적 defer의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿