• go context理解


    context包

    总结起来就一句话:一个接口,四个实现,六个方法
    (1.)一个接口

    type Context interface {
    	Deadline() (deadline time.Time, ok bool)
    	Done() <-chan struct{}
    	Err() error
    	Value(key interface{}) interface{}
    }
    

    (2.)四个实现

    a.) emptyCtx: 本质上是一个整型, *emptyCtx对Context接口的实现,只是简单的返回nil,false,Background和TODO这两个函数内部都会创建emptyCtx
    b.) cancelCtx: 可以被取消。 取消后,它也会取消所有实现取消方法的子级。这是一种可取消的Context,done用于获取该Context的取消通知,children用于存储以当前节点为根节点的所有可取消的Context,以便在根节点取消时,可以把它们一并取消,err用于存储取消时指定的错误信息,而这个mu就是用来保护这几个字段的锁,以保障cancelCtx是线程安全的。而WithCancel函数,可以把一个Context包装为cancelCtx,并提供一个取消函数,调用它可以Cancel对应的Context
    c.)timerCtx:它在cancelCtx的基础上,又封装了一个定时器和一个截止时间,这样既可以根据需要主动取消,也可以在到达deadline时,通过timer来触发取消动作。
    要注意,这个timer也会由cancelCtx.mu来保护,确保取消操作也是线程安全的。通过WithDeadline和WithTimeout函数,都可以创建timerCtx,区别是WithDeadline函数需要指定一个时间点,而WithTimeout函数接收一个时间段。
    d.) valueCtx: 它用来支持键值对打包,WithValue函数可以给Context附加一个键值对信息,这样就可以通过Context传递数据了

    (3.)六个方法

    相关链接

    https://studygolang.com/articles/32660?fr=sidebar

    【励志篇】: 古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。
  • 相关阅读:
    每日日报110
    每日日报109
    每日日报108
    每日日报107
    每日日报106
    每日日报105
    每日日报104
    eclipse新建Maven Project项目后出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
    0proxy/reflect
    toRefs/toRef/unref/customRef
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/14392361.html
Copyright © 2020-2023  润新知