问题描述
在golang中,map是一种非常常用的数据结构。但是在并发环境下,map是不安全的,会出现并发问题。
在golang中,map是一种非常常用的数据结构。但是在并发环境下,map是不安全的,会出现并发问题。
在项目开发中,我们经常会需要调用其他服务或初始化一些资源。此时就需要用到单例模式,通过一个全局变量,在资源首次被使用时服务会去初始化它,其他地方需要使用资源时就用这个全局变量。但是在多线程环境下,这个全局变量可能会被多个线程同时初始化,这时就需要用到sync.Once。
实际开发中经常会碰到一种情况:一个聚合信息的接口(如app首页/用户信息等),需要查询一大堆数据,而这些数据都是分散在各个服务中。同步去一个一个查询会导致接口响应过长。于是很自然而然想到了并发查询。
这边文章没有很复杂的概念,单纯介绍下函数式编程的概念,以及在Golang中如何实现函数式编程。
本文代码基于go 1.22, 其他版本大差不差
上篇博客分析了sync.Mutex的源码,我们在碰到共享资源问题的时候可以使用sync.Mutex来解决。
刚刚开始接触golang时,觉得mutex锁简单易用。到下个阶段自己觉得这种是悲观锁,效率很低。直到学习和了解它的原理才明白mutex是一个兼顾性能和公平的精妙设计。