![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GO标准库
lz404
偶尔很认真
展开
-
sync.Pool使用与实现
之所以需要单独提及sync.Pool是因为 1. 它对于性能优化非常重要,gin利用sync.Pool来重新利用context, fasthttp更是专门提及"sync.Pool is your best friend."。2. 由于其引入就是为了优化性能,因此我们可以从源码中了解到很多优化的技巧。Sync.Pool的使用sync.Pool用于并发安全的获取和存储一组对象,这个结构体只有两个方...原创 2020-04-05 20:49:59 · 1159 阅读 · 0 评论 -
GO标准库巡礼-context
简述context包的核心内容是定义了Context类型,Context可以携带DDL信号、取消信号以及基于请求的数据在函数之间传递。context一个常见的应用场景是在服务器处理请求上。这个过程我们可能会创建很多goroutine来完成对请求的处理,一方面我们往往需要一个全局性的方式能够快速的结束所有goroutine,其中的原因可能是用户停止了请求或者说处理已经超时没必要继续处理,另一方面...原创 2020-03-26 15:06:57 · 164 阅读 · 0 评论 -
GO标准库巡礼-fmt
fmt模板fmt中的转义词%v通用占位符,该占位符会自动转换变量为string(以默认选项)。通常用于转换基础类型%#v会将变量转换为符合go syntax的输出,也就是说我们可以直接复制输出结果然后粘贴到代码中而不会报错。我们可以看一个例子来加深理解func main() { c := struct { hello string world string }{"...原创 2020-03-24 16:52:50 · 154 阅读 · 0 评论 -
GO标准库巡礼-strconv
作为初学者,我们可能常常首先接触到的是 fmt 包,但是对于基础类型的转换而言, strconv 包更加高效且允许编译器类型检查。strconv 针对四种基础类型提供了相应的函数:布尔值,整数,浮点数和字符串。整数操作如何从字符串中解析出有符号整数和无符号整数?如何将有/无符号整数转化为字符串浮点数操作如何从字符串中解析出浮点数?我们可以使用ParseFloat函数,函数定义...原创 2020-03-23 16:09:30 · 173 阅读 · 0 评论 -
GO标准库巡礼-encoding/binary
encoding/binary回想区为什么除了encoding/json,我们还需要encoding/binary?文本协议和二进制协议区别是什么?什么是字节序?能否举一个例子说明字节序不同带来的变化?为什么要引入小端法?优点是什么?什么是网络字节序?如何从字节切片中读取一个定长整数?如何将一个定长整数写入到字节切片中?如何从比特流中读取一个定长整数?如何从比特流中写入一个定长...原创 2020-03-22 16:25:19 · 1197 阅读 · 1 评论 -
GO标准库巡礼-sync
在go中sync负责提供同步原语如互斥锁等。任何属于该包类型的对象都不应该被复制(只能passed by pointer)sync.Mutexsync.Mutex是最常用的同步原语。其作用在于对共享资源的互斥访问。常用的使用范式mutex := &sync.Mutex{}mutex.Lock()// Update shared variable (e.g. slice, po...原创 2020-03-19 22:42:45 · 170 阅读 · 0 评论 -
sync.Map详解
sync.Map简述简单来说,sync.Map是并发版本的map,golang自带的map在并发操作下会触发panic。sync.Map支持Load,Store, LoadOrStore,Range,Delete操作。其中Range支持在多goroutine下运作,能确保每个key最多被处理一次,但是无法保证遍历过程中实时同步其他goroutine的增删操作。使用sync.Map你真的需要s...原创 2020-03-19 17:27:46 · 6442 阅读 · 2 评论 -
GO标准库巡礼-bufio
声明:该系列文章是基于对@golangspec、go官方文档、《Go语言标准库》的学习汇总而成bufio封装了io.Reader和io.Writer并且通过缓存来提高性能。bufio.Writer为什么需要buffer?在没有buffer的情况下,我们的writer函数会调用系统调用来完成一次写入,而小量写入下,系统调用的时间花销远远大于写入本身的花销。因此,过多的小量写入会大大影响性能。...原创 2020-03-18 15:32:58 · 322 阅读 · 0 评论 -
GO标准库巡礼-ioutil
声明:该系列文章是基于对@benbjohnson的《Go Walkthrough》、go官方文档、《Go语言标准库》的学习汇总而成ioutil提供了一些简单的IO操作函数作为辅助Reader与ReadCloser的简单转换有些时候我们有一个io.Reader的实例,但是我们要求传递io.ReadCloser的实例,那么我们可以使用NopCloser函数func NopCloser(r io...原创 2020-03-05 17:04:36 · 274 阅读 · 0 评论 -
GO标准库巡礼-bytes与strings
声明:该系列文章是基于对@benbjohnson的《Go Walkthrough》、go官方文档、《Go语言标准库》的学习汇总而成bytes和strings简单对比[]byte表示了一组可修改、可扩展、连续性的byte列表。而string表示不可修改、固定长度、连续的byte列表。这意味着你不能更新字符串,只能创建,而这可能带来很大的负担从使用者角度来看,字符串更易于使用,能作为map的键。...原创 2020-02-23 23:18:46 · 622 阅读 · 0 评论 -
GO标准库巡礼-IO
声明:该系列文章是基于对@benbjohnson的《Go Walkthrough》、go官方文档、《Go语言标准库》的学习汇总而成io包为I/O提供了基本的接口,由于这些接口都以不同实现封装了低级操作,因此,除非另行通知,不应假定它们是线程安全的读取bytesReader接口在读取bytes上最常用到的是Reader接口,标准库的每一个模块几乎都实现了该接口type Reader int...原创 2020-02-22 18:59:12 · 303 阅读 · 0 评论