当前位置: 首页 > news >正文

context上下文(一)

创建一个基础的context

使用BackGround函数,BackGround函数原型如下:
func Background() Context {
	return backgroundCtx{}
}

作用:Background 函数用于创建一个空的 context.Context 对象。

context.Background() 函数用于获取一个空的 context.Context 对象。这个对象没有设置任何的截止时间(deadline),也没有取消通道(cancelation signal),并且不包含任何键值对(values)。它通常被用作根 context,即在开始一个新的 goroutine 或启动一个新的操作时,如果没有更具体的 context 可用,就可以使用 context.Background() 获取的 context

ctx := context.Background()                      //创建一个基础context

ctx的类型为:实现context.Context接口的类型
 

type Context interface {
	Deadline() (deadline time.Time, ok bool)

	Done() <-chan struct{}

	Err() error

	Value(key any) any
}

使用WithValue向ctx添加键值对

//func WithValue(parent Context, key, val any) Context
ctx = context.WithValue(ctx, "userID", "123456")

定义一个函数,接收context参数

funcWithCtx := func(ctx context.Context) {
		//从context中检索值
		if value := ctx.Value("userID"); value != nil {
			fmt.Println("User ID from context", value)
		} else {
			fmt.Printf("No User ID from context")
		}
	}

因为Context接口类型中有Value(key any) any

通过传入的context对象中检索名为“userID”的值通过【通过键查找值】

完整代码

package main

import (
	"context"
	"fmt"
)

func main() {
	//func Background() Context
	ctx := context.Background()                      //创建一个基础context
	ctx = context.WithValue(ctx, "userID", "123456") //使用WithValue向context中添加键值对

	//定义一个函数,接受一个context参数
	funcWithCtx := func(ctx context.Context) {
		//从context中检索值
		if value := ctx.Value("userID"); value != nil {
			fmt.Println("User ID from context", value)
		} else {
			fmt.Printf("No User ID from context")
		}
	}
	funcWithCtx(ctx) //调用函数,传递context
}

http://www.dtcms.com/a/126716.html

相关文章:

  • C#里使用MaterialDesign来构造自定义窗口
  • 希哈表的学习
  • 9-函数的定义及用法
  • ASP.NET Core 性能优化:服务器端响应缓存
  • Lab Cloud FPGA 硬件在线实验云平台介绍
  • aviator 自定义表达式
  • 猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
  • 设计模式:工厂方法模式 - 高扩展性与低耦合的设计之道
  • 【AI】免费GPU算力平台部署wan2.1
  • 三肽-10瓜氨酸(核心蛋白聚糖肽)-抗皱抗衰 改善肤质
  • 华为的欧拉操作系统怎么进行开发、环境搭建、编译、调试等
  • 分库分表设计与Java实践:从理论到实现
  • 【KWDB 创作者计划】KWDB 数据库全维度解析手册
  • 机器学习--网格搜索
  • 第一部分——Docker篇 第四章 搭建镜像仓库
  • 路由器端口映射设置方法教程,和无公网IP内网穿透实现外网访问方案步骤
  • AIP-217 不可达资源
  • 【Redis】string类型
  • 算法---子序列[动态规划解决](最长递增子序列)
  • 在 Wireshark 中如何筛选数据包
  • 在线论坛系统
  • Charles抓包-安装和IOS抓包指导
  • HTML、CSS、JavaScript
  • selenium 常用方法
  • CTF web入门之命令执行
  • 论文解读 | Task Shield:Agent“任务对齐“的防护盾,抵御提示注入攻击新方案
  • 面试题大全
  • 第六周作业
  • 【计算机网络】同步操作 vs 异步操作:核心区别与实战场景解析
  • vue实现中英文切换