202003-11 Golang 源码系列二:Slice实现原理分析 HOT 众所周知,在golang中,slice(切片)是我们最常使用到的一种数据结构,是一种可变长度的数组,本篇文章我们主要结合源码来介绍一下slice的底层实现,以及在使用slice时的一些注意事项。 继续阅读 >
202003-11 Golang源码系列一:Map实现原理分析 HOT 每个map的底层结构是hmap,是有若干个结构为bmap的bucket组成的数组。每个bucket底层都采用链表结构。 继续阅读 >
202003-10 除了标准库 sync 包外,这个官方包(golang.org/x下的)你应该了解 HOT go 语言里使用 go 关键字就可以轻松搞定并发的问题,它讲究的是“不要通过共享内存来通信,而应该通过通信来共享内存”的原则,在 Go 里 channel 是个线程安全的多线程通讯介质。Go 本身的这些原语基本上可以解决常见的各种需求了。 继续阅读 >
202003-10 Go 如何防止缓存穿透 HOT 事实上不止于防止 缓存穿透, do-once-while-concurrent 更准确的定位是 重复资源过滤 ,,在某讲座业务中,使用 do-once-while-concurrent 来避免同一时刻同一用户id 重复解析 、列表页 重复检索 、排序 等,减少了资源竞争,提高了整体的qps和稳定性。 继续阅读 >
202003-10 一文掌握 Go 语言 Select 的四大用法 HOT 本文带大家认识 Go 语言的 Select 用法,相信大家对于 switch 并不陌生,然而 select 跟 switch 有个共同特性就是都通过 case 的方式来处理,但是 select 跟 switch 处理的事情完全不同,也完全不相容。来看看 switch 有什么特性: 各种类型及型别操作,接口 interface{} 型别判断 variable.(type),重点是会依照 case 顺序依序执行。 继续阅读 >
202003-03 Go-项目结构和代码组织 做大量的输入,通过对比、借鉴,加上自己的经验,产出一个尽可能优的方案。 开源界优秀项目的结构示例 因为最新的 Go 版本已经使用 module 作为版本依赖,所以,所有项目的 vendor 我都忽略,建议直接使用 module 来管理依赖,而且较好的解决某些库国内访问不了的问题 继续阅读 >
202002-14 Go语言之父带你重新认识字符串、字节、rune和字符 Go语言之父带你重新认识字符串、字节、rune和字符 文章篇幅还是挺长的,大家时间都很宝贵所以我先把文章探究的问题的结论放在前面,有时间的同学还是建议整篇读一下。 继续阅读 >