登录
首页 >  Golang >  Go教程

Golang 函数:用 context.WithTimeout 创建带超时的子上下文

时间:2024-10-27 12:17:13 370浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《Golang 函数:用 context.WithTimeout 创建带超时的子上下文》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

context.WithTimeout() 函数用于创建带超时的子上下文,子上下文超时或父上下文被取消时,子上下文也会被取消。其使用方法如下:创建父上下文。调用 context.WithTimeout(parent, timeout) 创建子上下文,其中 parent 为父上下文,timeout 为子上下文的超时时间。调用子上下文的 CancelFunc 取消子上下文,无论是否超时。

Golang 函数:用 context.WithTimeout 创建带超时的子上下文

Golang 函数:用 context.WithTimeout 创建带超时的子上下文

context.WithTimeout 函数在 Go 中用于创建一个新的子上下文,并为其设定一个超时。当子上下文超时或父上下文被取消时,子上下文也会被取消。

语法:

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)

其中:

  • parent:父上下文
  • timeout:子上下文的超时时间

返回:

  • Context:新的子上下文
  • CancelFunc:取消子上下文的函数

实战案例:

以下示例演示了如何使用 context.WithTimeout 函数:

package main

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

func main() {
    // 创建父上下文
    ctx := context.Background()

    // 创建一个为期 1 秒的子上下文
    subCtx, cancel := context.WithTimeout(ctx, 1*time.Second)
    defer cancel()

    // 在子上下文中执行任务
    go func() {
        for {
            select {
            case <-subCtx.Done():
                return
            default:
                fmt.Println("任务仍在运行...")
            }
        }
    }()

    // 等待子上下文完成
    <-subCtx.Done()
    fmt.Println("子上下文超时或被取消")
}

注意:

  • WithTimeout 超时时,它会发送一个 context.DeadlineExceeded 错误。
  • 如果父上下文被取消,所有子上下文也会被取消,无论它们是否超时。
  • 调用 CancelFunc 函数可以立即取消子上下文。

到这里,我们也就讲完了《Golang 函数:用 context.WithTimeout 创建带超时的子上下文》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于context,timeout的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>