跟着开源项目学GO(4)

241 阅读3分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

今天是周日,学习爱我,我爱学习,今天下大雪了,下的雪贼厚贼软贼粘贼白,出去堆了个大雪人,我可是照着掘金广大男网友们的帅气形象和女网友们的美丽形象堆的,给大家看看,一定惊艳大家,嘿嘿嘿嘿嘿……

image.png

废话不多说,上货

在这里插入图片描述

开源项目——go-gin-api

go-gin-api

这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。

main.go

首先必然是项目的入口文件main.go了,如下

image.png

别问我为什么下面都是波浪线,因为我手欠把项目删除了,这是新clone下来的,着急写嘛将就一下而已啦

import中包含了导入的相关包,包括了内置包(未飘红的)和第三方包(飘红的),怎么样,这下感谢我着飘红的线了吧

context

昨天已经说完了fmt包,今天就来说一说context包,这个包算是go中一个很有特色的包了

说到context包就要说一下context,context被译作上下文,是一个比较抽象的概念,在我的理解中,上下文一般就是在程序运行中,每个线程的状态,例如停止,挂起,休眠等等,多个线程会将状态相互传递,就像是在语文中上下文需要关联一样。

包上下文定义了 Context 类型,它携带跨越 API 边界和进程之间的截止日期、取消信号和其他请求范围的值。                         

对服务器的传入请求应该创建一个上下文,对服务器的传出调用应该接受一个上下文。

                                                     —————引自官方文档

在go中线程一般是指Goroutine嘛,为了让程序获取到每个Goroutine的状态,Goroutine就会将对应的状态放到Context变量中,在运行中进行传递。

为了方便管理多个Goroutine的上下文,go采用Context包来统一管理,context包不仅实现了在程序单元之间共享状态变量的方法,同时能通过简单的方法,使我们在被调用程序单元的外部,通过设置ctx变量值,将过期或撤销这些信号传递给被调用的程序单元。

说到Context包就先看一下Context的接口,直接上源码吧,如下

截图_20224814044801.png

Deadline()函数是用来获取设置的Context截止时间,第一个返回值是截止时间,到了这个时间点,Context 会自动发起取消请求;第二个返回值 ok==false 时表示没有设置截止时间,如果需要取消的话,需要调用取消函数进行取消。

四个函数中最常用的就是Done()函数了,当我们取消一个Context时,我们可以拿到一个关闭的 chan,虽然是关闭的chan,但是却可以读取,所以只要能读取到chan就可以收到Context取消信号,并做出相关操作。

Err()函数用于获取取消的错误原因,是什么原因让 Context 被取消。

Value()函数用于获取绑定于Context上的键值对,

下回预告

下一回咱们就继续讲讲context包的常用的衍生方法和net/http常用函数。

下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述