让 sync.Map 支持泛型 (colobu.com)

【简介】

渐渐地, Go泛型越来越多应用的Go的标准库中了。一些标准库的类型,比如container/heap、container/list、container/ring、math都是有机会支持泛型的,但是考虑到Go向下兼容的情况,这些包可能不会直接修改,最可能就是新建一些并发的包,或者放在扩展包中。

本篇文章将讲一个相对复杂的例子,也就是对sync.Map的修改,让它支持泛型。

点击查看原文 >>

@技术头条 2023-06-24 09:19 / 原作者微博:@colobu / 0个评论
赞过的人: @IT技术博客大学习
要不要再学学下面的文章?
Robust 2.0:支持Android R8的升级版热修复框架 (tech.meituan.com)
2016年,我们对美团Android热更新方案Robust的技术原理做了详细介绍。近几年,Google 推出了新的代码优化混淆工具R8,Android 热修复补丁制作依赖二次构建包和线上包对比,需要对Proguard切换到R8提前进行适配和改造,本文分享 Robust 在适配 R8 以及优化改进中的一些思路和经验,希望能对大家有所帮助或者启发。
by @技术头条 2023-06-24 09:21 查看详情
一个泛型的有序Go Map实现 (colobu.com)
我们知道, Go内建的map类型对于插入的元素并没有保持它们的插入顺序,遍历的时候也故意设置成随机的。因此,如果我们想让map保持元素的插入顺序,需要借助第三方的库才行,今天就给大家介绍一个这样的库OrderedMap。

其实在其他编程语言中,也有类似的数据结构,比如java中的 LinkedHashMap, python中的OrderedDict。

本文介绍如何使用Go语言实现这样的一种数据类型。注意我们要实现的是OrderedMap, 不是SortedMap或者TreeMap,SortedMap遍历的时候是按照Key的排序顺序遍历的,我们可以通过先获取所有的key并排序,再逐个访问对应的值。

但是OrderedMap遍历的时候要是保持插入的顺序,这怎么办到的呢?
by @技术头条 2023-06-24 09:19 查看详情
Chrome浏览器原生支持的7种后台服务简介 (www.zhangxinxu.com)

妈呀,不知不觉中,浏览器竟然支持了这么多的Web后台服务特性,不少API我还是第一次见到。
by @技术头条 2023-02-12 14:01 查看详情
机智!生抠 map的哈希函数 (colobu.com)
我们经常会在一些场景,比如特定的数据结构、cache等场景中使用这样一个哈希函数,那么如何为任务类型实现一个优雅高效的hash函数呢?其实Go运行时中map中就实现了。回想一下内建的map是不是支持泛型的?它的key可以是comparable类型(包括接口类型),内部实现中会把此类型的key计算一个哈希值,能不能吧它的hash函数拿出来使用?很遗憾,Go官方并没有想暴露出来这样的hasher的想法,它的代码也是不容易抽取整理成一个hasher函数。
by @技术头条 2022-12-24 23:34 查看详情
Go泛型不支持泛型方法,这是一个悲伤的故事 (colobu.com)
根据Go 泛型提案的描述,Go不支持泛型方法:No parameterized methods。主要原因Go泛型的处理是在编译的时候实现的,泛型方法在编译的时候,如果没有上下文的分析推断,很难判断泛型方案该如何实例化,甚至判断不了,导致目前(Go 1.18)Go实现中不支持泛型方案。

不过,泛型方法的缺失,多多少少给程序员带来一丝丝的忧伤的情绪,在一些场景之下,使用起来特别不方便。我最近看到了几个因为缺乏泛型方法导致的问题,在本文中总结一下,和大家探讨。
by @技术头条 2022-05-06 23:15 查看详情
官宣Vue3.0抛弃支持IE,把精力集中在这个上面 (mp.weixin.qq.com)
自Vue 3的开发开始到2018年底,我们一直被要求提供IE11支持。许多用户询问Vue 3是否将支持IE11,我们最初的计划是发布Vue 3并使其稳定,然后添加稍后会支持IE11。
by @code小生 2021-11-15 14:51 查看详情
谷歌宣布 Android 加入对 Rust 的支持 (mp.weixin.qq.com)
谷歌发布博客称 AOSP (Android Open Source Project) 现已支持使用 Rust 开发 Android 操作系统。
by @code小生 2021-05-01 16:18 查看详情
谷歌最支持的 Android 开发架构指南 (mp.weixin.qq.com)
就像所有软件一样,Android应用程序也应该遵循通用的架构规则和模式,没有遵循正确架构的Android应用程序往往会因为缺乏一致的设计而变得很难维护。
by @code小生 2021-03-06 18:14 查看详情
App 多窗口支持架构 (mp.weixin.qq.com)
本文主要分三个方面进行讨论。首先,我们将概述为了实现多窗口支持,App 生命周期在iOS13中的变化。然后我们将深入探讨新的 UIScene Delegate,以及我们应该在这里构建怎样的代码。最后,我们将介绍 ArchitectureKit 的一些最佳实践,确保为用户提供一致,无感知的多任务处理体验。
by @code小生 2021-01-03 14:58 查看详情
Flutter 制霸全平台,新版将支持 Windows 应用程序! (mp.weixin.qq.com)
为了给iOS和Android移动平台轻松开发应用程序,谷歌推出了名为Flutter的应用开发框架。不过随着时间的推移,它正在成为“一次编译,随处运行”的大规模跨平台项目的一个缩影。最新消息是,新版Flutter应用开发框架已支持轻松开发可在Windows平台上运行的应用程序。
by @code小生 2020-11-15 17:52 查看详情