【GoLang】golang context channel 详解

admin2024-10-07  5

代码示例:

package main

import (
    "fmt"
    "time"

    "golang.org/x/net/context"
)

func main() {
    //    ctx, cancelFunc := context.WithDeadline(context.Background(), time.Now().Add(time.Second*5))
    ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*5)
    ctx = context.WithValue(ctx, "Test", "123456")
    //    defer cancelFunc()

    if t, ok := ctx.Deadline(); ok {
        fmt.Println(time.Now())
        fmt.Println(t.String())
    }
    go func(ctx context.Context) {
        fmt.Println(ctx.Value("Test"))
        for {
            select {
            case <-ctx.Done():
                fmt.Println(ctx.Err())
                return
                //            default:
                //                continue
            }
        }
    }(ctx)
    //    if ctx.Err() == nil {
    //        fmt.Println("Sleep 10 seconds...")
    //        time.Sleep(time.Second * 10)
    //    }
    //    if ctx.Err() != nil {
    //        fmt.Println("Alredy exit...")
    //    }
    time.Sleep(time.Second * 3)
    cancelFunc()
    //    for {
    //        if ctx.Err() != nil {
    //            fmt.Println("gracefully exit...")
    //            break
    //        }
    //    }
}

 

 
 
 
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!