摘要: 关于 Go GC 优化的手段你知道的有哪些?比较常见的是通过调整 GC 的步调,以调整 GC 的触发频率。 设置 GOGC 设置 debug.SetGCPercent() 这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 h 阅读全文
posted @ 2021-11-17 15:15 haohongfan 阅读(905) 评论(0) 推荐(2) 编辑
摘要: gin 源码阅读系列文章列表: gin 源码阅读(1) - gin 与 net/http 的关系 gin 源码阅读(2) - http请求是如何流入gin的? gin 源码阅读(3) - gin 路由的实现剖析 gin 源码阅读(4) - 友好的请求参数处理 hi,大家好,我是 haohongfan 阅读全文
posted @ 2021-10-20 18:23 haohongfan 阅读(233) 评论(1) 推荐(0) 编辑
摘要: 每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性。很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 demo 跑起来而已。有些文章明显是没有完整的项目实践经历,却在狂吹 GraphQL 的各种优点,让不熟 阅读全文
posted @ 2021-10-09 14:14 haohongfan 阅读(567) 评论(1) 推荐(6) 编辑
摘要: 推荐阅读: gin 源码阅读(1) - gin 与 net/http 的关系 本篇文章是 gin 源码分析系列的第二篇,这篇文章我们主要弄清一个问题:一个请求通过 net/http 的 socket 接收到请求后, 是如何回到 gin 中处理逻辑的? 我们仍然以 net/http 的例子开始 fun 阅读全文
posted @ 2021-09-26 10:15 haohongfan 阅读(175) 评论(0) 推荐(0) 编辑
摘要: gin 是目前 Go 里面使用最广泛的框架之一了,弄清楚 gin 框架的原理,有助于我们更好的使用 gin. 这个系列 gin 源码阅读会逐步讲明白 gin 的原理。 gin 概览 想弄清楚 gin, 需要弄明白以下几个问题: request数据是如何流转的 gin框架到底扮演了什么角色 请求从gi 阅读全文
posted @ 2021-09-24 16:58 haohongfan 阅读(324) 评论(0) 推荐(0) 编辑
摘要: hi,大家好,我是 hhf。 最近在做 prometheus 生态的 cortex 优化工作,遇到一个比较坑的 go mod 的问题,这里分享一下。 我为什么将标题称为:如何欺骗 Go mod 呢?这个挺有意思的,这里先卖个关子,不过确实是突破了 Go mod 的相关特性。 在正式展开这个话题之前, 阅读全文
posted @ 2021-08-30 10:37 haohongfan 阅读(48) 评论(0) 推荐(0) 编辑
摘要: hi, 大家好,我是 hhf。 有这么一个 Go 面试题:请说出 slice 和 array 的区别? 这简直就是送分题。现在思考一下,你咋样回答才能让面试官满意呢? 我这里就不贴这道题的答案了。但是我想内存方面简单分析下 slice 和 array 的区别。 Array func main() { 阅读全文
posted @ 2021-08-24 12:10 haohongfan 阅读(178) 评论(0) 推荐(0) 编辑
摘要: hi, 大家好,我是 hhf。 《Goland 这些实操技巧,你可能还不会!》介绍了日常开发中一些比较好用的技巧。本篇文章继续介绍一些其他比较好用的技巧。 自定义结构 tag Goland 一个很好用的功能:tag 自动补全。在 struct 结构里,可以在字段类型后敲入 json 或 xml 向结 阅读全文
posted @ 2021-08-17 14:15 haohongfan 阅读(509) 评论(0) 推荐(0) 编辑
摘要: hi, 大家好,我是 haohognfan。 可能你看过的 interface 剖析的文章比较多了,这些文章基本都是从汇编角度分析类型转换或者动态转发。不过随着 Go 版本升级,对应的 Go 汇编也发生了巨大的变化,如果单从汇编角度去分析 interface 变的非常有难度,本篇文章我会从内度分配+ 阅读全文
posted @ 2021-08-10 10:16 haohongfan 阅读(331) 评论(0) 推荐(1) 编辑
摘要: hi,大家好,我是 haohongfan。 本篇文章剖析下 Go 定时器的相关内容。定时器不管是业务开发,还是基础架构开发,都是绕不过去的存在,由此可见定时器的重要程度。 我们不管用 NewTimer, timer.After,还是 timer.AfterFun 来初始化一个 timer, 这个 t 阅读全文
posted @ 2021-06-08 10:44 haohongfan 阅读(858) 评论(1) 推荐(3) 编辑
摘要: hi, 大家好,我是 haohongfan。 sync.Pool 应该是 Go 里面明星级别的数据结构,有很多优秀的文章都在介绍这个结构,本篇文章简单剖析下 sync.Pool。不过说实话 sync.Pool 并不是我们日常开发中使用频率很高的的并发原语。 尽管用的频率很低,但是不可否认的是 syn 阅读全文
posted @ 2021-05-18 10:27 haohongfan 阅读(95) 评论(0) 推荐(1) 编辑
摘要: 话说一个美滋滋的上午, 突然就出现大量报警, 接口大量请求都响应超时了. 排查过程 查看服务器的监控系统, CPU, 内存, 负载等指标正常 排查日志, 日志能够响应的结果也正常. request.log 中响应时长高达数秒 查看数据库, codis 监控, 各项指标正常 不得已, 只能打开线上 p 阅读全文
posted @ 2021-04-27 10:29 haohongfan 阅读(454) 评论(1) 推荐(0) 编辑
摘要: 说道面向对象(OOP)编程, 就不得不提到下面几个概念: 抽象 封装 继承 多态 其实有个问题Is Go An Object Oriented Language?, 随便谷歌了一下, 你就发现讨论这个的文章有很多: reddit google group 那么问题来了 Golang是OOP吗? 使用 阅读全文
posted @ 2021-04-26 10:52 haohongfan 阅读(609) 评论(0) 推荐(2) 编辑
摘要: Go 获取随机数是开发中经常会用到的功能, 不过这个里面还是有一些坑存在的, 本文将完全剖析 Go math/rand, 让你轻松使用 Go Rand. 开篇一问: 你觉得 rand 会 panic 吗 ? 源码剖析 math/rand 源码其实很简单, 就两个比较重要的函数 func (rng * 阅读全文
posted @ 2021-04-25 10:32 haohongfan 阅读(495) 评论(0) 推荐(0) 编辑
摘要: hi,大家好,我是 haohongfan。 本篇文章会从源码角度去深入剖析下 sync.Cond。Go 日常开发中 sync.Cond 可能是我们用的较少的控制并发的手段,因为大部分场景下都被 Channel 代替了。还有就是 sync.Cond 使用确实也蛮复杂的。 比如下面这段代码: packa 阅读全文
posted @ 2021-04-23 10:57 haohongfan 阅读(450) 评论(1) 推荐(0) 编辑
摘要: 面试题: package main func a() []int { a1 := []int{3} a2 := a1[1:] return a2 } func main() { a() } 看到这个题, 你的第一反应是啥? (A) 编译失败 (B) panic: runtime error: ind 阅读全文
posted @ 2021-04-22 10:26 haohongfan 阅读(259) 评论(0) 推荐(0) 编辑
摘要: struct 是我们写 Go 必然会用到的关键字, 不过当 struct 遇上一些比较特殊类型的时候, 你注意过你的程序是否正常吗 ? 一段代码 type URL struct { Ip string Port string mux sync.RWMutex params url.Values } 阅读全文
posted @ 2021-04-21 10:27 haohongfan 阅读(281) 评论(1) 推荐(1) 编辑
摘要: Hi,大家好,我是 haohongfan。 上一篇文章《一文完全掌握 Go math/rand》,我们知道 math/rand 的 global rand 有一个全局锁,我的文章里面有一句话:“修复方案: 就是把 rrRand 换成了 globalRand, 在线上高并发场景下, 发现全局锁影响并不 阅读全文
posted @ 2021-04-20 10:17 haohongfan 阅读(297) 评论(0) 推荐(1) 编辑
摘要: hi,大家好,我是haohongfan。 本篇主要介绍 WaitGroup 的一些特性,让我们从本质上去了解 WaitGroup。关于 WaitGroup 的基本用法这里就不做过多介绍了。相对于《这可能是最容易理解的 Go Mutex 源码剖析》来说,WaitGroup 就简单的太多了。 源码剖析 阅读全文
posted @ 2021-04-19 10:35 haohongfan 阅读(277) 评论(2) 推荐(2) 编辑
摘要: hi, 大家好,我是 haohongfan。 本篇文章会从使用方式和原码角度剖析 sync.Map。不过不管是日常开发还是开源项目中,好像 sync.Map 并没有得到很好的利用,大家还是习惯使用 Mutex + Map 来使用。 下面这段代码,看起来很有道理,其实是用错了(背景:并发场景中获取注册 阅读全文
posted @ 2021-04-16 14:43 haohongfan 阅读(618) 评论(0) 推荐(1) 编辑