写在前面嗯,学习GO,所以有了这篇文章博文内容为《GO语言实战》读书笔记之一主要涉及知识接口是什么方法集(值接收和指针接收)多态「 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波」Golang 里面的 多态 是指代码可 ......
93
0
0
2024-02-01
01 介绍Go 语言使用 goroutine 和 channel,可以实现通过通信共享内存。本文我们介绍 Go 语言怎么通过通信共享内存。02goroutine 和 channel在了解 Go 语言怎么通过通信共享内存之前。我们需要先了解一些预备知识,即 goroutine 和 channel 是什么?goroutine :goroutine 具有简单的模型 ......
99
0
0
2024-01-26
01 介绍Go 语言为了方便我们开发,提供了 15 个内置函数,比如 len、cap、make 和 new 等。本文我们结合 Go 内置函数官方文档[1],介绍一下 Go 语言中的内置函数。02 内置函数内置函数append:内置函数 append 可以将元素追加到切片的末尾。func append(slice []Type, elems ...Type) ......
89
0
0
2024-01-26
01 介绍我们在之前的文章中介绍过标准库 log 包的使用方式,它虽然使用方便,但是它支持的功能比较简单。本文我们介绍 uber 开源的日志库 zap,首先使用 Gin 框架构建一个 Web 应用,然后通过在该 Web 应用中记录日志,来介绍 zap 的使用方式。最后,我们再使用开源的日志切割库 lumberjack,进行日志切割。02 使用 Gin 构建一 ......
90
0
0
2024-01-26
做单元测试的时候,我们需要打桩mock掉一些中间件,miniredis是mock掉redis的一个利器它既可以通过非网络本地mock,也可通过tcp请求,经过redis协议完整mockredis代码,首先看下如何使用:package main import ( "github.com/alicebob/miniredis/v2" "github ......
92
0
0
2024-01-19
httptest是golang官方源码自带的测试包,它可以非常方便获取http请求结构体,http返回值结构体,以及在本地启动一个loopback的server,方便我们做单测。对于go的web应用程序中往往需要与其他系统进行交互, 比如通过http访问其他系统, 此时就需要一种方法用于打桩来模拟Web服务端和客户端,httptest包即Go语言针对Web应 ......
93
0
0
2024-01-19
https://github.com/jarcoal/httpmock是一个mock http请求包,他的原理是使用MockTransport替换http包client的Transport RoundTripper,并注册请求对应的返回值。当http请求发出的时候,被mock的Transport拦截,通过路径匹配找到对应的response,实现了http请求 ......
94
0
0
2024-01-19
go-mysql-elasticsearch的入口位于:mysql/go-mysql-elasticsearch/cmd/go-mysql-elasticsearch/main.go核心逻辑如下:var configFile = flag.String("config", "./etc/river.toml", "go-mysql-elasticsearch ......
111
0
0
2024-01-19
如何定义一个Fake server,接受客户端的请求,返回希望的结果,本质上是一个tcp server服务器,定义一个服务器过程如下: l, err := net.Listen("tcp", "127.0.0.1:4000") c, err := l.Accept() conn, err := server.NewConn(c, "root", ......
82
0
0
2024-01-19
实现binlog增量同步(Incremental dumping)需要哪些步骤呢?获取配置,初始化同步器,找到上一次同步位置,开启同步,并处理解析到的事件,整体流程如下: cfg := replication.BinlogSyncerConfig{} syncer := replication.NewBinlogSyncer(cfg) stre ......
86
0
0
2024-01-19
https://github.com/go-mysql-org/go-mysql-elasticsearch是一款通过解析mysql的binlog将mysql数据同步到es的同步工具,支持正则表达式多表同步。下面我们分析下如何使用。首先是安装git clone https://github.com/go-mysql-org/go-mysql-elastics ......
93
0
0
2024-01-19
mysql Client进行一次查询需要三个核心操作,获得连接、测试连是否可用、发送请求:conn, _ := client.Connect("127.0.0.1:3306", "root", "", "test") conn.Ping() r, _ := conn.Execute(`insert into table (id, name) values ......
91
0
0
2024-01-19
如何用golang自己实现一个canel呢,github.com/go-mysql-org/go-mysql给我们提供了这样的能力,它已经完成mysql协议的解析,并将解析后同步从库的过程实现,加入了几个插件点,实现自己的canel只需要实现这几个插件点即可完成我们自定义的同步工具。下面我们结合源码分析一下如何实现。实现一个canel需要下面四步:初始化配置 ......
87
0
0
2024-01-19
https://github.com/go-mysql-org/go-mysql是一个实现了mysql协议和binlog协议的工具库,可以用来实现主从复制(Replication),增量同步(Incremental dumping),客户端(Client),虚拟服务端(Fake server),高可用(Failover),mysql的驱动(database/ ......
82
0
0
2024-01-19
在分析完gravity的原理和如何使用以后,我们开始分析下它的源码。gravity有5个入口,代表了5个工具。1,cmd/dcp/main.gogo func() { closed <- dcp.StartLocal(&barrierConfig, collectorConfigs, &checkerConfig, shutD ......
81
0
0
2024-01-19