获得徽章 0
- #青训营 x 字节后端训练营# 回顾了昨天学习的内容,再继续学习Go语言的基础知识。我重点学习了Go的数组、切片和映射等数据结构,了解HTTP协议和RESTful API的相关知识,使用gofmt规范代码缩进等评论点赞
- #青训营 x 字节后端训练营# 回顾了昨天学习的内容,再继续学习Go语言的基础知识。重点学习了Go的数组、切片和映射等数据结构,了解HTTP协议和RESTful API的相关知识,注意了代码规范和可读性,使用gofmt进行代码风格统一。评论点赞
- #青训营 x 字节后端训练营#
context
在Go语言中,context包提供了一种机制,用于在不同的Goroutine之间传递请求作用域和取消信号。context.WithCancel函数是context包中的一个函数,用于创建一个新的带有取消功能的Context对象。
下面是一个使用context.WithCancel函数创建新的Context对象并取消它的示例代码:
func main() {
// 创建一个带有取消功能的Context对象
ctx, cancel := context.WithCancel(context.Background())
// 启动一个Goroutine,模拟一个长时间运行的任务
go func() {
for {
select {
case <-ctx.Done(): // 如果Context对象被取消,则退出循环
fmt.Println("Task cancelled")
return
default: // 如果Context对象未被取消,则继续执行任务
fmt.Println("Task running")
time.Sleep(1 * time.Second)
}
}
}()
// 等待5秒钟后取消Context对象
time.Sleep(5 * time.Second)
cancel()
fmt.Println("Context cancelled")
}
当我们运行该程序时,会看到以下输出:
Task running
Task running
Task running
Task running
Task running
Context cancelled
Task cancelled
可以看到,在取消Context对象后,Goroutine退出了循环,并输出了"Task cancelled"。展开评论点赞