【Golang】如何使用Golang中的context进行传递值和取值?


前言

如何使用Golang中的context进行传递值和取值?


一、context简介

context包在Go语言的1.7版本被引入为标准库的一部分,其最初的设计是源自Google。该包提供了一种机制,能够在API边界和进程间传递截止日期(deadline)、取消信号、以及其他请求生命周期内的数据。

在进行网络请求或运行其他需要在特定时间内完成的操作时,context能够设置截止时间或超时,当超过指定时间后,相关的操作会被自动取消。此外,context也提供了手动取消操作的能力。

context内部维护了一个并发安全的键值对映射(map),用于在请求的生命周期内存储和传递数据。这样,无需将数据显式地作为参数在函数或goroutine之间传递,而是可以通过context在全局范围内访问这些数据。

因此,context可以被视为一种全局的、跨API和进程边界的数据和信号传递机制,极大地提高了Go语言在处理分布式系统、并发控制和资源管理方面的能力。

二、context传递值和取值

1.传递值

context.WithValue函数是Go语言中context包的一个函数,它用于将键值对附加到指定的context中。这个函数的原型如下:

func WithValue(parent Context, key, val interface{}) Context

2.取值

然后你可以用Value方法从Context中获取这个值:

v := ctx.Value("k1")
fmt.Println(v) // 输出 "v1"

2.代码示例

package main

import (
	"context"
	"fmt"
)

func SetValue(ctx context.Context) context.Context {
	return context.WithValue(ctx, "k1", "v1")
}

func GetValue(ctx context.Context) string {
	return ctx.Value("k1").(string)
}

func main() {
	ctx := context.Background()
	ctx = SetValue(ctx)
	value := GetValue(ctx)
	fmt.Println("value:", value)
}

总结

context中使用context.WithValue函数传递值,使用Value方法从context中获取这个值。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值