>백엔드 개발 >Golang >Go 프로그램이 종료되기 전에 정리 작업을 어떻게 실행할 수 있습니까?

Go 프로그램이 종료되기 전에 정리 작업을 어떻게 실행할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-28 15:07:11225검색

How Can I Execute Cleanup Operations Before a Go Program Exits?

Go 프로그램 종료 후 작업 실행

질문:

특정 실행 방법 Go 프로그램 실행이 끝나면 작업이 어떻게 되나요? 이는 특히 HTTP 서버의 정리 작업 또는 정상적인 종료 처리와 관련이 있습니다.

답변:

Unix 신호 활용

Go에서 실행 종료 작업을 처리하려면 SIGINT(생성된)와 같은 Unix 신호를 등록해야 합니다. Ctrl-C로). 이 신호는 프로그램이 종료되어야 할 때 Go 런타임에 알립니다.

코드 조각

다음 코드 조각은 인터럽트 신호를 포착하고 이전에 정리 작업을 수행하는 방법을 보여줍니다. 종료:

package main

import (
    "log"
    "os"
    "os/signal"
)

func main() {
    // Create a channel to receive the interrupt signal.
    sigchan := make(chan os.Signal)
    signal.Notify(sigchan, os.Interrupt)

    // Start a goroutine to listen for the signal.
    go func() {
        <-sigchan
        log.Println("Program killed!")

        // Perform last actions and wait for all write operations to end.

        os.Exit(0)
    }()

    // Start the main program tasks.
}

설명

  1. make(chan os.Signal)은 Unix 신호를 수신하는 채널을 만듭니다.
  2. signal. Notify(sigchan, os.Interrupt)는 운영 체제로부터 SIGINT 신호를 수신할 채널을 등록합니다.
  3. 식찬 채널의 신호를 수신하기 위해 고루틴이 생성됩니다.
  4. SIGINT 신호가 수신되면(예: Ctrl-C를 누름) 고루틴은 정리 작업을 실행합니다. 그리고 os.Exit(0)을 사용하여 프로그램을 정상적으로 종료합니다.
  5. 그동안 메인 프로그램은 정리 작업이 완료될 때까지 계속 실행됩니다. 작업이 완료되었습니다.

위 내용은 Go 프로그램이 종료되기 전에 정리 작업을 어떻게 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.