前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang中context基本使用withcancel

golang中context基本使用withcancel

作者头像
Java架构师必看
发布2021-05-14 17:10:45
2.5K0
发布2021-05-14 17:10:45
举报
文章被收录于专栏:Java架构师必看Java架构师必看

用一个简单的程序介绍一下withcancel的context,我们一般写goroutine的时候会在里面做一个for{},同时在for的里面还会做一个select{}判断接收当前的chan,不同的chan做不同的动作。

context也是利用了这样的结构,context提供了取消函数,cancelFunc可以随时终止goroutine。方式goroutine中的for循环一直循环下去。 

代码语言:javascript
复制
package main

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

var c = 1

func doSome(i int) error {
	c++
	fmt.Println(c)
	if c > 3 {
		return errors.New("err occur")
	}
	return nil
}

func speakMemo(ctx context.Context, cancelFunc context.CancelFunc) {
	for {
		select {
		case <-ctx.Done():
			fmt.Printf("ctx.Done")
			return
		default:
			fmt.Println("exec default func")
			err := doSome(3)
			if err != nil {
				fmt.Printf("cancelFunc()")
				cancelFunc()
			}
		}
	}
}

func main() {
	rootContext := context.Background()
	ctx, cancelFunc := context.WithCancel(rootContext)
	go speakMemo(ctx, cancelFunc)
	time.Sleep(time.Second * 5)
}

运行结果:

代码语言:javascript
复制
exec default func
2
exec default func
3
exec default func
4
cancelFunc()ctx.Done
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档