Go 语言面试题
目录

Go 语言中如何使用 context.WithDeadline 和 context.WithTimeout 设置超时?

· 约 3 分钟读完 · 第 74 / 175 章

推荐答案

本题详细解读

context.WithTimeout

context.WithTimeout 用于创建一个带有超时时间的上下文。它接受两个参数:父上下文和超时时间。当指定的时间过去后,上下文会自动取消,并返回一个 context.CancelFunc 函数,用于手动取消上下文。

在上面的代码中,ctx 是一个带有 2 秒超时的上下文。如果在 2 秒内没有完成操作,ctx.Done() 会返回一个通道,表示上下文已取消。

context.WithDeadline

context.WithDeadline 用于创建一个带有截止时间的上下文。它接受两个参数:父上下文和截止时间。当达到指定的截止时间时,上下文会自动取消,并返回一个 context.CancelFunc 函数,用于手动取消上下文。

在上面的代码中,ctx2 是一个带有 2 秒后截止时间的上下文。如果在截止时间之前没有完成操作,ctx2.Done() 会返回一个通道,表示上下文已取消。

区别

  • context.WithTimeout 是基于当前时间加上指定的超时时间来设置截止时间。
  • context.WithDeadline 是直接指定一个具体的截止时间。

两者都可以用于控制操作的超时或截止时间,选择使用哪一个取决于具体的需求。