当前位置: 首页 > 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
}

相关文章:

  • 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 中如何筛选数据包
  • 贵州建站互联网科技有限公司/深圳seo博客
  • 长宁哪里有做网站优化比较好/域名备案
  • 做旅游去哪个网站找图/行业关键词查询
  • 网站中的分享怎么做/企业营销策划及推广
  • 交通局网站建设整改/加强服务保障满足群众急需m
  • wordpress建站很麻烦/企业网站关键词优化