![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go学习笔记
文章平均质量分 70
xidianhuihui
这个作者很懒,什么都没留下…
展开
-
go-redis源码解析:连接池原理
redis也是通过hook执行命令,initHooks时,会将redis的hook放在第一个通过hook调用到process方法,process方法内部再调用_process。原创 2024-07-09 21:08:28 · 957 阅读 · 0 评论 -
redis运维:sentinel模式如何查看所有从节点
【代码】redis运维:sentinel模式如何查看所有从节点。原创 2024-07-08 17:33:42 · 222 阅读 · 0 评论 -
go-redis源码解析:如何实现sentinel高可用
go-redis里,sentinel只用来获取master和从节点的ip地址,在获取master和replica节点ip时,如果sentinel不可用,那么会换其他的sentinel重试,并将可用的sentinel换到第一个。原创 2024-07-04 10:24:26 · 535 阅读 · 0 评论 -
go-redis源码解析:cluster模式如何选择节点
go-redis原创 2024-07-03 15:23:05 · 356 阅读 · 0 评论 -
Golang数据类型比较
x = Data {为什么结果为false?debug看一下原因是json.Unmarshal默认会将所有的数字类型转为float64针对这种情况,可以封装一个DeepEqual方法}) bool {原创 2023-04-12 20:20:40 · 616 阅读 · 0 评论 -
测试框架testify使用
● 构建更完善的测试。原创 2023-06-09 15:43:26 · 225 阅读 · 0 评论 -
golang异常控制
如果 panic 和 recover 发生在同一个协程,那么 recover 是可以捕获的,如果 panic 和 recover 发生在不同的协程,那么 recover 是不可以捕获的也就是哪个协程有panic,哪个协程里必须要有recover,否则会把整个程序弄崩溃。原创 2024-05-31 11:05:46 · 351 阅读 · 0 评论 -
如何安装不同版本的go
可以通过在goland中preference->go->goroot中下载,选择要下载的目录,就不会覆盖了。如果直接从官网下载不同版本的go并安装,会默认安装到/usr/local/go上,覆盖之前安装的版本。原创 2024-03-05 17:30:03 · 556 阅读 · 0 评论 -
测试框架goconvey使用
结果图[外链图片转存中…(img-fuv17gA2-1686296533775)][外链图片转存中…(img-vDJdU9QE-1686296533776)]原创 2023-06-09 15:42:26 · 111 阅读 · 0 评论 -
Go单元测试及框架使用
框架名使用说明优点缺点testing如上go官方原生测试框架,简单好用断言不够友好,需要大量if else可以配合testify的assert使用testify1. 和 go test 无缝集成,直接使用该命令运行2. 支持断言,写法更简便3. 支持 mock & suite功能mock的功能不够强大,需要配合其他mock框架使用GoConvey1. 能够使用 go test 来运行测试2. 支持断言,写法更简便3. 支持通过浏览器查看测试结果4. 支持嵌套,可以分组。原创 2023-06-09 15:39:47 · 2168 阅读 · 0 评论 -
多核系统内存假共享问题
假共享是 SMP 系统上的一种常见性能问题。在SMP系统中,每个处理器均有一个高速缓存。当不同处理器上的线程修改驻留在同一高速缓存行(Cache Block,或Cache Line)中的变量时就会发生假共享。这种现象之所以被称为假共享,是因为每个线程并非真正共享相同变量的访问权。访问同一变量或真正共享要求编程式同步结构,以确保有序的数据访问。线程 0 和线程 1 会用到不同变量,它们在内存中彼此相邻,并驻留在同一高速缓存块(Cache Block,或Cache Line)。原创 2023-05-15 16:37:33 · 665 阅读 · 0 评论 -
Golang dlv远程debug
如果不想remote程序阻塞等debug,而是直接执行,那么可以在启动远程程序的时候添加。如果不想remote程序阻塞等debug,而是直接执行,那么可以在启动远程程序的时候添加。执行后,会一直停在这个页面,等待goland连接后再往下走。zip文件,下载后( 如果没权限,记得 执行。如果不到500M,dlv会因为内存不足启动不起来。建议使用方式2,可以启动后debug,更方便。服务启动起来后,远程debug就会生效了。服务启动起来后,远程debug就会生效了。执行后会一直停留在这里,等待客户端连接。原创 2024-05-30 15:50:18 · 488 阅读 · 0 评论 -
Golang基本数据类型
/ rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. //int32的别名,几乎在所有方面等同于int32 //它用来区分字符值和整数值 type rune = int32。原创 2023-04-18 10:08:38 · 214 阅读 · 0 评论 -
mock工具GoMonkey使用
由于方法(成员函数)无法通过 GoStub 框架打桩,当产品代码的 OO 设计比较多时,打桩点可能离被测函数比较远,导致UT用例写起来比较难受。通过 Monkey,我们可以解决函数或方法的打桩问题,但 Monkey 不是线程安全的,不要将 Monkey 用于并发的测试中。applyFunc和applyMethod 是在运行时把a函数的机器码替换成跳转到b函数地址,使用了内联优化会在编译时将函数直接展开,无法替换。outputs是希望返回的结果序列(测试时会按顺序返回),数量需要和对应的测试用例对应。原创 2023-06-09 15:39:03 · 1616 阅读 · 1 评论 -
mock工具GoMock使用
goMock支持对特定输入打桩和对任意输入打桩(gomock.any()),可根据具体情况使用;是官方提供的 mock 框架,同时还提供了 mockgen 工具用来辅助生成测试代码。实际项目中,可以用gomock来mock dao层和rpc层代码,隔离外部依赖。有一个DB接口,使用mockgen产生一个mock对象。在测试的使用mock对象。下面是自动生成的代码。原创 2023-06-09 15:41:28 · 518 阅读 · 0 评论 -
Golang异常控制
如果 panic 和 recover 发生在同一个协程,那么 recover 是可以捕获的,如果 panic 和 recover 发生在不同的协程,那么 recover 是不可以捕获的也就是哪个协程有panic,哪个协程里必须要有recover,否则会把整个程序弄崩溃。原创 2023-04-14 15:30:39 · 404 阅读 · 0 评论 -
mock工具-GoStub使用
gostub是一款轻量级打桩框架,虽然已经可以优雅的解决很多场景的函数打桩问题,但对于一些复杂的情况,却只能干瞪眼。github地址:github.com/prashantv/gostub。同时,GoStub框架需要改造函数,不符合我们的日常习惯。原创 2023-06-09 15:40:57 · 99 阅读 · 0 评论 -
golangci-lint如何关闭typecheck
typecheck是go源码的校验,无法通过.golangci.yml配置关闭。可以直接在golangci-lint源码层面关闭typecheck。原创 2024-02-20 10:00:35 · 716 阅读 · 0 评论 -
Go module包及依赖管理
版本号格式为,如v1.2.3。当有不兼容的改变时,需要增加major版本号,如v2.1.0。Go module规定,如果major版本号大于1,则major版本号需要显式地标记在module名字中,如。这样做的好处是Go module 会把和视做两个module,他们甚至可以被同时引用。原创 2024-05-31 11:10:09 · 362 阅读 · 0 评论 -
Go开发环境搭建
由于目前网上Go的开发环境搭建文章很多,有些比较老旧,都是基于 GOPATH的,给新入门的同学造成困扰。以下为2023 版 Go 开发环境搭建,可参照此教程搭建Go开发环境。提醒一句,入门教程涉及到代码放入 src 目录下的,基本是基于 GOPATH 的教程,请忽略。原创 2023-03-28 15:20:32 · 696 阅读 · 0 评论