MST
星途 面试题库

面试题:Go语言中如何利用Context实现简单的超时控制

在Go语言中,假设你有一个函数`func heavyTask(ctx context.Context) (result string, err error)`,它执行一个较为耗时的任务。请使用`context.Context`实现当调用该函数超过2秒时,自动取消任务并返回错误,简述实现思路并给出核心代码示例。
21.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建一个带有超时的context.Context,设置超时时间为2秒。
  2. 将这个context.Context传递给heavyTask函数。
  3. heavyTask函数内部,使用ctx.Done()通道来检查是否收到取消信号,如果收到则停止任务并返回错误。

核心代码示例

package main

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

func heavyTask(ctx context.Context) (result string, err error) {
    // 模拟一个耗时任务
    select {
    case <-ctx.Done():
        return "", ctx.Err()
    case <-time.After(3 * time.Second):
        return "Task completed", nil
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
    defer cancel()

    result, err := heavyTask(ctx)
    if err != nil {
        fmt.Println("Task cancelled:", err)
        return
    }
    fmt.Println("Result:", result)
}