GoLang下划线总结

2020-09-12
阅读 1 分钟
1.6k
第一眼看上去还挺奇怪的,_ 的作用就是忽略,作者这么写有什么意义吗?代码中 Render 是一个接口类型,这种赋值隐含实现了接口的类型断言:右边的数据类型是否实现了左边的接口类型,如果没有实现,则会报编译错误。

sync.Map

2019-12-17
阅读 1 分钟
1.4k
不知道图解的是否到位 几个核心要点: 首先,read初始化之后,始终会保持不变,这里指的是Key的纬度,不会加也不会减; 其次,read和dirty中共有的元素的是相同的一个地址; 再次,dirty中存储的是read中不存在的元素,以及read中之前被删除又会恢复的元素; 最后,dirty在miss次数达到一定限制会,会替换read,重新上面...

Blog.9 go.1.13中的Modules

2019-11-12
阅读 1 分钟
1.6k
GOPRIVATE升级到go.1.13不得不调整的一个变量。表示引用到的modules是私有的,无须从proxy下载,也无须校验包的checksum。

Blog.8 runtime中P的理解

2019-11-11
阅读 4 分钟
1.3k
P是在Go1.1引入的概念,初始默认等于CPU核的数量。P只是一个逻辑概念,跟CPU也没有任何关系。 源码go/1.13.4/libexec/src/runtime/proc.go中对P的注释如下: {代码...} 再通过源码go/1.13.4/libexec/src/runtime/runtime2.go来简要了解一下P在调度过程中的状态变化: {代码...} 通过调整GOMAXPROCS可以控制P的状态,_Pde...

Blog.6 分布式会话跟踪系统架构设计与实践

2019-08-25
阅读 2 分钟
2.4k
调用链trace系统可以帮助技术人员快速的定位问题,查看整个请求的调用链路,及各个链路的耗时情况。方便技术人员针对性的对服务进行性能优化。 概念 参考调用链trace的设计分析的介绍,trace系统的要素包括:traceId、spanId、annotation。 traceId:贯穿整个调用链路,通过traceId来关联链路的所有相关日志 spanId:标...

Blog.5 Go Module

2019-08-11
阅读 2 分钟
1.4k
这世上太多的人,宁愿吃生活苦,也不愿吃自律的苦。大概是因为生活的苦,躺着就来了,而自律的苦,得自己去找。但只有吃得下自律的苦,才有成功的自由,没有一种成功是走得了捷径的,通向真正成功的唯一道路只有自律。越成功,越自律。越自律,越成功。

Blog.4 故障排查

2019-07-28
阅读 1 分钟
1.1k
测试提Bug的基本要素,主要包括: 期望得到的结果 实际得到的结果 如何重现问题 生产环境出了故障,当然也脱离不开这3个要点。只不过相对重现问题会略微复杂。毕竟,故障总是我们意外之外的情况。 根据Bug发生的现象,我们会提出很多假设,然后进行逐步排除。 当问题发生时,最应想到的是:系统最近是否有过改动。很大概...

Blog.3 使用httptest模拟接口测试

2019-07-22
阅读 4 分钟
2.4k
在Test中在模拟接口测试,首先我们先实现一个最基础的Test例子: 模拟一个ping/pong的最基本请求,我们先写一个返回pong的HTTP handler {代码...} 然后写测试用例: {代码...} 程序日志输出Pass,这个小demo正常运行了。然后我们在这个基础上,我们给请求增加一个超时时间、以及携带header头等信息 我们将请求的header头...

Blog.2 pprof 分析测试用例

2019-07-21
阅读 2 分钟
1.3k
首先,我们声明一个耗时函数。传递一个time.Duration的数据类型,表示函数执行的时间。注意,这里不能使用time.Sleep,它得不到cpu的执行。函数如下:

Blog.1 database.sql.driver

2019-07-17
阅读 10 分钟
1.6k
在事务操作中,要求事务的各个阶段都使用一个Conn连接。在连接被关闭之前,还需要执行rollback操作。 文章翻译了Go源码下database.sql.driver的接口规范,具体实现可以查看源码。 {代码...}

Using context cancellation in Go

2019-06-23
阅读 14 分钟
15.3k
问题:针对同一个接口请求,绝大多数都可以正常处理,但却有零星的几请求老是处理失败,错误信息返回 context canceled。重放失败的请求,错误必现。

database package

2019-06-03
阅读 2 分钟
1.5k
在database库下清除过期连接时,使用了如下的代码逻辑。其中freeConn是空闲连接池,d是连接可被重复使用的最长时间,nowFunc返回的是当前时间。最新生成的连接在freeConn的末尾,而清除的过程则是使用最新的、次新的连接依次替换最早过期的、次早过期的连接。

数据一致性(二)

2019-03-17
阅读 4 分钟
5.6k
至今没有接触过MySQL多主的情况,即存在多个MySQL实例同时负责读写请求(抛弃只读库)。思考后认为:没有这么实现的技术难点在于:数据的一致性得不到保证。此外,还会涉及:

新年彩蛋之中大奖

2019-02-09
阅读 5 分钟
1.2k
2019年计划通过福利彩票发家致富的,可以好好看一看这篇博客。作为新年彩蛋来送给大家,也希望大家能真的中大奖。—— 新年快乐,给每个有梦想的程序员

垃圾回收之引用计数

2019-02-06
阅读 4 分钟
2.5k
思来想去,决定总结一下垃圾回收机制。引用计数与我结缘最早,也比较简单、基础,遂决定从引用计数入手。—— 不管人非笑,不管人毁谤,不管人荣辱,任他功夫有进有退,我只是这致良知的主宰不息,久久自然有得力处

gRPC入门

2019-01-27
阅读 6 分钟
5.2k
时间飞逝 如一名携带信息的邮差 但那只不过是我们的比喻 人物是杜撰的 匆忙是假装的 携带的也不是人的讯息 为什么使用grpc 主要包括以下两点原因: protocl buffer一种高效的序列化结构。 支持http 2.0标准化协议。 很对人经常拿thrift跟grpc比较,现在先不发表任何看法,后续会深入thrift进行介绍。 http/2 HTTP/2 enab...

Float的基本介绍

2019-01-16
阅读 4 分钟
3.9k
关于浮点数,为什么它生来就可能存在误差?带着好奇查阅了一些介绍,然后做了简单汇总。这只是一段知识的开始,后续还会继续完善。(很难过,这里的MarkDown不支持编辑公式。请移驾本人的博客地址:[链接] )—— 荡荡上帝,下民之辟。疾威上帝,其命多辟。天生烝民,其命匪谌。靡不有初,鲜克有终。

Gin使用

2019-01-06
阅读 3 分钟
4.7k
Gin对net/http包做了封装,支持路由、中间件等特性,极大的方便对Http Server的开发。文章通过一个Test例子,来简要介绍。对于特别基础的部分,请阅读参考文章。

How to use godog

2018-12-29
阅读 3 分钟
2.7k
首先访问Git的地址:Godog,它也是用来做Go Test一样的事情,只是换了一种形式。引入了一个概念:BDD。通俗的讲,就是虚拟现实场景,完成一个业务的测试。

Net Transport

2018-12-09
阅读 6 分钟
2.7k
下面是截取的一段描述,建议Client或Transport在整个服务期间最好是全局单例的,Transport本身会维护连接的状态,而且线程安全。强烈建议,不要使用系统提供的任何默认值。

数据一致性(一)

2018-12-02
阅读 2 分钟
3.4k
MySQL的事务是数据一致性的典范,事务内的执行要么都成功,要么都失败。但业务系统涉及系统间的相互调用,涉及的数据库也不尽相同,所以实现数据一致性还是有挑战的。

Go net 超时处理

2018-10-28
阅读 7 分钟
13.8k
这篇文章详细介绍了,net/http包中对应HTTP的各个阶段,如何使用timeout来进行读/写超时控制以及服务端和客户端支持设置的timeout类型。本质上,这些timeout都是代码层面对各个函数设置的处理时间。比如,读取客户端读取请求头、读取响应体的时间,本质上都是响应函数的超时时间。

chan中传递map数据,传递的是引用

2018-03-25
阅读 2 分钟
4.3k
写个demo测试一下,channel中传递的是数据的拷贝,还是引用? 预期:传递的是引用类型 {代码...} 最终输出的结果,跟预想的一样。打印的结果说明,e使用引用的是原数据的地址。 {代码...} 修改chan数据类型,下面替换为依次替换为数组、slice、struct对象。 传递数组类型 只需修改chan类型,其他不变。将chan类型修改为[...