golang gin(1) - 整体框架分析
1.Gin 简明介绍
gin 是什么?官方给的解释为:Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 优于 httprouter,速度提高了近 40 倍。
Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance – up to 40 times faster. If you need smashing performance, get yourself some Gin.
gin 有一下的一些特性:
- 快速:基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。
- 支持中间件:传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。
- Crash 处理:Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!
- JSON 验证:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。
- 路由组:更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。
- 错误管理:Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。
- 内置渲染:Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。
- 可扩展性:新建一个中间件非常简单,去查看示例代码吧。
golang 源码剖析 - Defer关键字
golang 源码剖析 - Context上下文
golang 源码剖析 - Select多路选择
golang Sync包源码剖析(7) - sync.Cond
golang Sync包源码剖析(6) - sync.Once
golang Sync包源码剖析(5) - sync.Pool
golang Sync包源码剖析(4) - sync.Map
golang Sync包源码剖析(3) - sync.WaitGroup
1.sync.WaitGroup 介绍
sync.WaitGroup 按照官方注释给的解释,它可以等待一组 Goroutine 集合的结束,主 goroutine
通过调用 Add()
函数来设置一定数量进行等待的 goroutines
,然后其余的一些 goroutines
则进行各自的运行结束之后再调用 Done()
,这样一来,等待的主 goroutine
会阻塞知道其余所有 goroutines
都结束。
A WaitGroup waits for a collection of goroutines to finish.The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished. At the same time, Wait can be used to block until all goroutines have finished.
golang Sync包源码剖析(2) - sync.RWMutex
1.sync.RWMutex 介绍
Sync.RWMutex 官方给出的定义是读/写互斥锁,锁可以由任意数量的读者或单个写者持有。 RWMutex
的零值是未锁定的互斥锁。
A RWMutex is a reader/writer mutual exclusion lock. The lock can be held by an arbitrary number of readers or a single writer. The zero value for a RWMutex is an unlocked mutex.
其包含了四种方法,如下所示:
1 | func (rw *RWMutex) Lock // 提供写锁加锁操作 |
这四个方法的源码解析在下面可以深入理解,可以大概了解到在 RWMutex
读操作可并发重入,而写操作是互斥的,读写锁通常用互斥锁、条件变量、信号量实现。
golang Sync包源码剖析(1) - sync.Mutex
本文字数: 19k 阅读时长 ≈ 17 分钟
1.Sync包 简明介绍
golang
语言有着天生适合高并发的特性,作为原生支持用户态进程(Goroutine
)的语言,当涉及到并发编程,多线程编程时候,则离不开锁相关的概念了,于是编写 golang
源码的大叔们就给了src/sync 这么个包,通过浏览源码可以知道src/sync包中提供了用于同步的一些基本原语,可以说这是一个很重要的的包了,如果掌握这个包,在编写代码的工程中肯定能够大有帮助,这个包大体上有:sync.Mutex、sync.RWMutex、sync.WaitGroup、sync.Map、sync.Pool、sync.Once、sync.Cond,也可以看一下官方给的sync包的一些方法解释: sync
,同时为了节省一下 Clone 源码时间,或者只想简单回顾一下源码,这里给了快捷的入口:src/sync。
在并发编程中,同步原语或者锁,他们的主要作用是保证多个线程或者多个goroutine
在访问同一片内存时不会出现混乱的问题,这个是一个非常重要的内容,很多人在编写代码的时候常常没有注重对这些并发访问的内容进行关注,导致出现事故也不清楚是什么原因,而sync
包中所有的结构都适用于goroutine
并发执行的情况,需要好好掌握。