首页 > 其他分享 >golang context 特点,和自己定义分类有什么区分

golang context 特点,和自己定义分类有什么区分

时间:2024-05-16 22:30:14浏览次数:16  
标签:自定义 取消 区分 分类 golang context Go 上下文

 

context 包的特点包括:

1 信号传递:

  取消信号:context 提供了一个取消机制,允许一个父级 goroutine 在必要的时候通知其子级 goroutines 任务应该停止执行。
  截止时间:可以设置一个截止时间,当超过这个时间时,上下文自动变为取消状态。
  超时:类似截止时间,但通常基于从当前时间开始的固定延迟。

 

2 数据传递:

  context 可以用来安全地在函数调用链中传递轻量级的数据,如请求ID或配置参数。

 

3 取消的级联:

如果一个上下文被取消,所有从它派生的上下文也会被取消,这允许整个任务树的优雅终止。

 

4 无侵入性:

context 是一个轻量级的机制,可以在不改变大量现有代码的情况下添加到函数签名中。

 

5 跨API边界:

上下文可以在网络请求、数据库查询和其他异步操作中传递,确保这些操作能够感知到取消信号。

 

示例:https://github.com/farwish/go-lab/blob/master/src/context/


与自定义分类相比,context 包提供的上下文有以下区别:

标准支持:

  context 是 Go 标准库的一部分,这意味着它经过了广泛的设计和测试,被社区广泛接受并遵循。

兼容性:

  使用 context 可以确保你的代码与其他标准库和第三方包的兼容性,因为它们通常都期望接收一个 context.Context 参数。

类型安全:

  自定义分类可能需要额外的类型转换和错误检查,而 context 提供了一种安全的方式来存储和检索键值对。

最佳实践:

  自定义分类可能没有考虑到所有最佳实践,而 context 包则包含了 Go 社区在并发控制和请求管理方面的经验。

开销:

  自定义解决方案可能引入额外的复杂性和潜在的性能开销,而 context 已经优化过,旨在保持低开销。

 

总的来说,虽然可以自定义类似的功能,但使用 context 标准库可以简化代码、提高可读性和一致性,并且与Go生态系统更好地集成。

 

Tool:文字生成图片代码差异比较器HTML查错器Llama3在线 

Link:https://www.cnblogs.com/farwish/p/18196881

标签:自定义,取消,区分,分类,golang,context,Go,上下文
From: https://www.cnblogs.com/farwish/p/18196881

相关文章

  • spark的SparkContext,SparkConf和SparkSession及dataframe和RDD的区别
    spark的SparkContext,SparkConf和SparkSession及dataframe和RDD的区别SparkContext和SparkConf任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。初始化后,就可以使用SparkContext对象所包含的各种方......
  • 区分import 什么时候使用 花括号{ }
    import与之对应的是export要理清export与 export default1、export与exportdefault均可用于导出常量、函数、文件、模块等2、在一个文件或模块中,export可以导出多个,对应的import导入加//导出exportfunctionfn1(){}exportfunctionfn2(){}exportfunctionfn3(......
  • 避免DbContext同时在多个线程调用
    下面这个微软官方文档阐述了,应该避免在多个线程上同时操作同一个DbContext:AvoidingDbContextthreadingissues其中有说到,在使用DbContext的代码中,所有的异步函数应该立即被await,否则会有极大概率抛出InvalidOperationException。这是因为一个DbContext实例不能被多个线程同时......
  • Golang初学:文件操作,标准库
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章读取文件内容,写入新文件(可能存在、也可能不存在)。 相关标准库iofsospathfilepath ShowCodefuncCopyFile(){ //测试文件拷贝 varfsrc,fdststring varstartt......
  • SpringContextUtils
    @ComponentpublicclassSpringContextUtilsimplementsApplicationContextAware,EnvironmentAware{privatestaticApplicationContextapplicationContext;privatestaticEnvironmentenvironment;@OverridepublicvoidsetApplicationContext(......
  • pyppeteer Execution context was destroyed, most likely because of a navigation
    一般情况下是当前page有开启新的页面,或者重定向之类的操作,然后重定向还没有完成的时候,就对page进行了操作,比如waitXpath之类的,就会导致该异常的出现。这个时候需要使用到函数page.waitForNavigation(timeout=timeout)但是怎么说呢,这个函数的使用,必须紧挨重定向开始以后,如......
  • golang- 实现多环境配置
    需要安装插件gogetgopkg.in/yaml.v3配置yaml文件  然后配置数据块与yaml结构相同,用来接收数据,字段需要配置映射关系,如下完整的执行代码如下//初始化yaml文件funcdoYaml(){envName:=ParamsObj.EnvifStringUtil.IsEmpty(envName){envNa......
  • Golang初学:time包,Ticker,Timer
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章packagetimehttps://pkg.go.dev/timePackagetimeprovidesfunctionalityformeasuringanddisplayingtime.测量、显示时间。 本文展示Ticker、Timer的基本使用。 ......
  • 最高院--返修责任与保修责任应严格区分,工程竣工验收合格后保修责任的起算并不必然意味
    1. (2016)最高法民再23号  齐齐哈尔市非凡建筑装饰工程有限责任公司与泰来县聚洋购物中心有限公司建设工程施工合同纠纷再审案申请人主张:在一审庭审过程中,聚洋公司才对施工质量提出异议,且质量鉴定的时间已经超过合同约定的一年质保期。在非凡公司不同意的情况下,一审法院采纳......
  • golang进程通过共享内存和C++进程进行通信
    目录serverclientserverC++可以使用POSIX共享内存API来创建和管理共享内存server.cpp#include<fcntl.h>#include<sys/mman.h>#include<sys/stat.h>#include<unistd.h>#include<cstring>#include<iostream>constchar*S......