快乐的程序员
go once源码分析 go once源码分析
代码package sync import ( "sync" "sync/atomic" ) type Once struct { done atomic.Uint32 m sync.Mutex } func (o *O
2024-04-23
手把手教你使用 pprof 手把手教你使用 pprof
写在前面pprof 是 Go 语言自带的性能分析工具,用于识别和解决应用程序中的性能瓶颈问题。大家应该或多或少有听说过 “三高代码”,这里的 “三高” 并不是指 “高血压、高血糖、高血脂”,而是指 ”高性能、高并发、高可用“,而 pprof
2024-04-21
go 垃圾回收中的混合写屏障 go 垃圾回收中的混合写屏障
写在前面go的三色标垃圾回收算法是很多面试官必问的,其中的写屏障也是一个重要的考点,但是混合写屏障知道的同学并不多,今天就来解释一下什么是混合写屏障 Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行
2024-04-10
go channel读写和关闭问题 go channel读写和关闭问题
写在前面面试或者工作中经常会遇到go channel读写和关闭问题,今天就来汇总一下 正文 channel种类 读 写 关闭 未初始化的channel 死锁 死锁 painc 已初始化但未关闭的channel 正常 正常 正常
2024-03-29
timeout context 父子超时顺序问题 timeout context 父子超时顺序问题
写在前面如果父子context都有超时控制,哪个先执行呢? 示例func main() { begin := time.Now() parentCtxTimeout := 4 // 父级 context 超时时间 childCtxTi
2024-03-29
GO内存管理 GO内存管理
任何语言的内存管理都是基于操作系统的,因此要搞明白Go的内存管理,必须先搞清楚操作系统的内存管理。语言的内存管理主要是对操作系统的内存针对开发者做了一层封装,让开发者少关心或者不用关心内存管理相关的工作。 1 操作系统内存管理1.1 原始的
2024-03-18
一文彻底弄懂23种设计模式 一文彻底弄懂23种设计模式
写在前面三年前在github上创建了一个仓库:https://github.com/ZBIGBEAR/design_pattern, 最近发现都是空的,没有实现。最近也准备找找工作,于是重新学一下设计模式,并且用go实现。 分类总体来说
从一个未初始化的chan和一个已关闭的chan中读取数据会发生什么 从一个未初始化的chan和一个已关闭的chan中读取数据会发生什么
写在前面这是一个面试极易被问到的问题,也是很容易出错的点 从未初始化的chan中读取数据会发生什么var m chan int i := <-m fmt.Println(i) 结果 fatal error: all goroutin
2024-03-14
go的Ticker,Timer,Tick的区别和用法 go的Ticker,Timer,Tick的区别和用法
写在前面在go面试的时候,面试官经常会问time包的Ticker,Timer以及Tick的区别,一般在超时控制的时候用的比较多。今天就来详细学一下这几个的区别 TickerTicker是周期性定时器,即周期性的触发一个事件,它会以一个间隔(
2024-03-14
50行代码实现一个go并发包 50行代码实现一个go并发包
写在前面这是一个只需要用50行代码(核心代码只有15行)实现的极其简单(原理简单、使用方法简单、功能简单)的go包mini_parallel_job,适合大部分并发任务,开箱即用。 代码package mini_parallel_job
2024-03-14
go map中不允许直接修改值值类型的内容 go map中不允许直接修改值值类型的内容
先来看一段代码 func main() { data := make(map[string][2]string) data["a"] = [2]string{"c", "d"} data["a"][0] = "e"
2024-03-14
一个通过websocket通信的go语言实现的即时通讯demo(二)-心跳 一个通过websocket通信的go语言实现的即时通讯demo(二)-心跳
写在前面上篇文章一个通过websocket通信的go语言实现的即时通讯demo介绍即时通信的基本能力,包括服务端监听、接收、广播消息,客户端连接、接收、发送消息。今天在这个基础上再增加心跳。 客户端在客户端写一个定时器,发送心跳包ws.Op
2024-03-14
1 / 6