Golang中的Defer必掌握的7知识点

在用Golang开发的时候,`defer`这个语法也是必备的知识,但是我们除了知道他是在一个函数退出之前执行,对于`defer`是否还有其他地方需要注意的呢。 本文整理的`defer`的全场景使用情况,部分场景源自网络,加上自己的额外观点和分析,完成了这份`defer`的7个隐性必备知识点。 提纲如下: * 知识点1: defer的执行顺序 * 知识点2:defer与return谁先谁后 * 知识点3:函数的返回值初始化与defer间接影响 * 知识点4:有名函数返回值遇见d...阅读全文

2020-03-23 14:15:20

开发了一个基于key的加锁方案

假如在开发一个http接口,在并发调用传入相同参数时,需要加锁,一个一个执行。在并发调用传入不同参数时,需要并发处理,不能加锁,这时需要一个基于key的加锁。 于是我开发了一个`Multilocker`类,用法为:使用`l := NewMultilocker()`获取`Multilocker`对象,使用mu := l.Get("key")获取sync.mutex,然后使用这个mutex加锁解锁,最后使用`l.Put("key")`归还这个sync.mutex 如果同一时间并发调用`G...阅读全文

2020-06-16 11:45:40