https://github.com/moiot/gravity是摩拜单车开源的一款mysql同步工具:它是由一系列简单插件组成的同步工具,提升了足够的可扩展性的同时,也保证了架构的简洁性。下面先分析下它的原理以及如何使用,然后分析下它的源码。Gravity是由下列插件组成:Input:作为数据输入的适配源,比如解析mysql的binlog,来产生gravi ......
105
0
0
2024-01-19
接着分析json-iterator的源码,首先从序列化函数入手b, err := jsoniter.Marshal(group) 它的定义位于github.com/json-iterator/go@v1.1.12/adapter.gofunc Marshal(v interface{}) ([]byte, error) { return Config ......
92
0
0
2024-01-19
https://github.com/json-iterator/go是一个非常优秀的go json解析库,完全兼容官方的json解析库。相对于官方的解析器,它的优化点在于:1,单次扫描:所有解析都是在字节数组流中直接在一次传递中完成的。readInt或readString一次完成,并没有做json的token切分,直接读取字符,转换成目标类型,readFl ......
89
0
0
2024-01-19
在golang源码分析:encoding/json(1)分析完序列化方法后,我们来分析下Unmarshal函数,它的源码位于encoding/json/decode.go,同样,我先看下函数的注释:1,它的第二个参数v是个interface,如果v时nil或者不是指针,返回 Unmarshal returns an InvalidUnmarshalError ......
99
0
0
2024-01-19
golang json序列化/反序列化的轮子一大票,很多人都吐槽官方库耗性能,但是性能耗在哪里?既然那么多优秀的开源库存在,golang官方包为啥不更新?带着这个疑问,基于go1.19分析下它的源码。首先看下Marshal()函数,它的源码位于:encoding/json/encode.go,在看源码之前,我们先看下注释,这是最详尽的文档。1,它允许每一种类 ......
87
0
0
2024-01-19
缘起:编译下面这段代码时,在Mac上没有什么问题,正常运行,点击查看代码:package main import ( "bytes" "encoding/binary" "encoding/json" "fmt" "log" "math/rand" "net/http" "time" ) func main() ......
80
0
0
2024-01-16
File: format.go完整项目地址: https://github.com/cuishuang/explain-source-code-by-chatgptformat.go 文件是 Go 语言标准库 time 包中用于时间格式化的核心文件。该文件定义了两个重要结构体:Time 和 Formatter,以及一系列支持时间格式化的函数和变量。Time ......
80
0
0
2024-01-16
问题当Go系统遭遇突增流量,洪峰过境,流量恢复正常后,整个系统的资源消耗是否会变大?第一反应,应该是会恢复到之前的水平吧!资源消耗在流量恢复正常之后,为什么会变大呢...复现模拟一下该场景。我们知道Go原生的网络模型goroutine-per-connection,即一个连接分配一个goroutine去处理。当流量突增,瞬间高并发,很有可能使协程数量也同步增 ......
91
0
0
2024-01-16
在企业内部创建一个公共的Golang模块工程可以帮助提高代码复用性和开发效率。本文将从如何创建一个公共的Golang工程开始,指导你一步步创建它、并引入到你的工程中。1、公共模块规范下面是一个简单的步骤指南来创建这样一个公共模块项目。创建版本控制仓库:使用版本控制工具(如Git)创建一个新的代码仓库,用于管理该公共模块工程的代码。项目结构:定义好项目的结构, ......
86
0
0
2024-01-14
OpenFaaS是一款广受欢迎的无服务(Serverless/Faas)部署框架,为开发者提供了一种简单而高效的方式来构建和部署无服务器函数。它旨在降低构建和管理无服务器应用程序的复杂性,同时提供可扩展性和高可用性。Serverless/faas由于其开发速度快,完全屏蔽底层基础设施细节,低成本、自动扩缩容等优势,广受欢迎。但是如何在企业内独立实现一个ser ......
103
0
0
2024-01-13
最近一年各大中小厂都在搞"优化",说到优化,目的还是"降本增效",降低成本,增加效益(效率)。技术层面,也有一些降本增效的常规操作。比如池化、io缓冲区技术golangC#eg.池化技术snnc.PoolObjectPool前端切图仔,归入前端资源池 , 随用随取字节数组缓冲区bytes.BufferList---io缓冲区bufioBufferStream ......
89
0
0
2024-01-12
本地启动在第三篇自定义中间件的前提下,已经说了很多关于本地通过 CRD 或者 File 作为 provider 的启动方式,这里想要补充一下关于本地 DEBUG 3.0.0 版本代码的问题,后续的源码分析也都会基于目前最新的 3.0 版本。在写文章的时候,目前 3.0 版本还是 beta 版本。按照上述文章的方式安装之后其实会发现本地启动会报一个关于*v1a ......
87
0
0
2024-01-06
原文链接: go-zero 的自适应熔断器上篇文章我们介绍了微服务的限流,详细分析了计数器限流和令牌桶限流算法,这篇文章来说说熔断。熔断和限流还不太一样,限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是。在一条调用链上,如果发现某个服务异常,比如响应超时。那么调用者为了避免过多请求导致资源消耗过大,最终引发系统雪崩,会直接返回错误,而不是疯狂调用这 ......
127
0
0
2024-01-06
目录固定窗口滑动窗口漏桶算法令牌桶滑动日志总结限流是项目中经常需要使用到的一种工具,一般用于限制用户的请求的频率,也可以避免瞬间流量过大导致系统崩溃,或者稳定消息处理速率这个文章主要是使用Go实现常见的限流算法,代码参考了文章面试官:来,年轻人!请手撸5种常见限流算法! 和面试必备:4种经典限流算法讲解如果需要Java实现或更详细的算法介绍可以看这两篇文章固 ......
177
0
0
2023-09-13
目录互斥锁的定义go Mutex 的基本用法互斥锁使用的两个例子gin Context 中的 Set 方法sync.Pool 中的 pinSlow 方法互斥锁使用的注意事项互斥锁锁定的是什么互斥锁实现原理信号量等待队列原子操作Mutex 的公平性Mutex 源码剖析LockUnlock总结在我们的日常开发中,总会有时候需要对一些变量做并发读写,比如 web ......
202
0
0
2023-09-11