首页 > 其他分享 >go context 了解 上下文

go context 了解 上下文

时间:2023-02-02 16:24:38浏览次数:48  
标签:context stop func time go heartbeat 上下文

 

 

了解上下文 (go-rod.github.io)

https://go-rod.github.io/#/understand-context

 

在了解上下文之前,请确保您已学习 Goroutines 和 Channels。 上下文主要用于在 Goroutines 之间传输上下文信息,包括:取消信号、超时、截止时间、k-v 等。

例如,我们有一个每秒打印一次的长时间运行的函数:heartbeat  beat

 

package main

import (
    "fmt"
    "time"
)

func main() {
    heartbeat()
}

func heartbeat() {
    tick := time.Tick(time.Second)

    for {
        <-tick
        fmt.Println("beat")
    }
}

 

 

如果我们想在按回车键时中止心跳,我们可以像这样编码:

func main() {
    stop := make(chan struct{})
    go func() {
        fmt.Scanln()
        close(stop)
    }()

    heartbeat(stop)
}

func heartbeat(stop chan struct{}) {
    tick := time.Tick(time.Second)

    for {
        select {
        case <-tick:
        case <-stop:
            return
        }
        fmt.Println("beat")
    }
}

 

因为这种代码太常用了,所以 Golang 抽象出了一个辅助包来处理它, 它被称为上下文。 如果我们使用 Context,上面的代码将变成这样:

 

func main() {
    ctx, stop := context.WithCancel(context.Background())
    go func() {
        fmt.Scanln()
        stop()
    }()

    heartbeat(ctx)
}

func heartbeat(ctx context.Context) {
    tick := time.Tick(time.Second)

    for {
        select {
        case <-tick:
        case <-ctx.Done():
            return
        }
        fmt.Println("beat")
    }
}

 

标签:context,stop,func,time,go,heartbeat,上下文
From: https://www.cnblogs.com/angdh/p/17086382.html

相关文章

  • MongoDB常用的语句:
    MongoDB常用的语句://------------------------------------MongoDB增删改查-----------------------------------------------//MongoDB插入数据//MongoDB不需要建......
  • django REST framework-序列化器
    djangoRESTframework简介构建RESTful风格API的一个基于django的web框架。drf框架,restframework框架。特性:强大的序列化器,可以高效的进行序列化和反序列化操作。极......
  • django-admin
    day12django-admin只需通过简单的配置,就可以自动生成一套后端管理程序。安装创建django项目之后,默认情况下,django-admin就是可用。注册APP模板的设置设置中......
  • 创建第一个Django项目
    本渣渣不专注技术,只专注使用技术,不是一个资深的coder,是一个不折不扣的copier【提示】——项目开发环境,Windows10、Python3.6.6、Django1.11、Pycharm2017.31、Django管理工......
  • Good Bye 2022: 2023 is NEAR D. Koxia and Game(数据结构,图论,数学)
    题目链接:https://codeforces.com/problemset/problem/1770/D 大致题意:有三个数组,每个数组的长度为n,数组里面的每个数在(1-n)。现在,对于每一位上面的数,Mahiru可以去掉其中......
  • Google的三架马车--Google File System (GFS)
    背景介绍国际方面,数据库理论研究起步于20世纪60年代,并于20世纪70年代开始产业化,逐步形成了成熟的IOE(IBM提供硬件,Oracle提供数据库软件,EMC提供存储介质)应用模式,开始占领全......
  • Google的三架马车--Google MapReduce
    背景介绍国际方面,数据库理论研究起步于20世纪60年代,并于20世纪70年代开始产业化,逐步形成了成熟的IOE(IBM提供硬件,Oracle提供数据库软件,EMC提供存储介质)应用模式,开始占领全......
  • 什么是Go语言?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师Codey1.Go语言的出身Go(又称golang)是Google开发的一种静态强类型、编译型、并发......
  • 爬google podcast 笔记
    问题1https://stackoverflow.com/questions/57217924/pyppeteer-errors-browsererror-browser-closed-unexpectedlyexportno_proxy=localhost,127.0.0.1......
  • Golang入门第一天
    变量的使用自动推导类型多重赋值和匿名变量常量的使用多重变量或常量的定义iota枚举bool布尔类型浮点型字符类型字符串类型字符类型和字符串类型的区别复数类......