MST

星途 面试题库

面试题:Go语言中如何实现基础的通知退出机制

请描述在Go语言里,使用什么方式可以实现一个简单的通知退出机制,例如在一个并发的goroutine中接收到外部的退出信号后安全退出,并举例说明相关代码结构。
35.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,可以使用context.Context来实现一个简单的通知退出机制。以下是一个示例:

  1. 使用context.Context实现退出机制
package main

import (
    "context"
    "fmt"
    "time"
)

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("收到退出信号,安全退出")
            return
        default:
            fmt.Println("工作中...")
            time.Sleep(1 * time.Second)
        }
    }
}
  1. 主函数调用
func main() {
    ctx, cancel := context.WithCancel(context.Background())

    go worker(ctx)

    // 模拟5秒后发送退出信号
    time.Sleep(5 * time.Second)
    cancel()

    // 等待goroutine退出
    time.Sleep(2 * time.Second)
}

在上述代码中:

  • context.WithCancel创建了一个可取消的context.Contextcancel函数用于发送取消信号。
  • worker函数中,通过select语句监听ctx.Done()通道。当该通道接收到数据时,意味着收到了退出信号,此时函数安全退出。
  • main函数中,启动worker goroutine,5秒后调用cancel函数发送退出信号,之后再等待2秒确保worker goroutine有足够时间退出。