GoLang下划线总结

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

sync.Map

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

Blog.10 mongo中hint的使用

2019-11-13
阅读 1 分钟
2.2k
The $hint operator forces the query optimizer to use a specific index to fulfill the query. Specify the index either by the index name or by document.

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.4k
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.7 IO多路复用

2019-09-20
阅读 5 分钟
1.3k
假设:启动一个WEB服务,服务端每accept一个连接,在内核中就会生成一个相应的文件描述符。现在服务器成功建立了10个连接,我们需要知道其中哪些连接发送过来了新的数据,然后对其进行处理和响应。

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

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

Blog.5 Go Module

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

Blog.4 故障排查

2019-07-28
阅读 1 分钟
1.2k
测试提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.4k
首先,我们声明一个耗时函数。传递一个time.Duration的数据类型,表示函数执行的时间。注意,这里不能使用time.Sleep,它得不到cpu的执行。函数如下:

Blog.1 database.sql.driver

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

Using context cancellation in Go

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

database package

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

mongo EOF(二)

2019-05-12
阅读 6 分钟
1.7k
上一节mongo EOF中,关于容器的配置,只是粗略的使用了Docker-Compose-MongoDB-Replica-Set项目提供好的docker-compose.yml文件。在使用过程中,我发现这个文件本身一些不如意的地方。首先,services中的creator服务,entrypoint指令太长了,不美;其次,所有的service都没有给容器外部暴露端口,导致外部无法访问容器;...

数据一致性(二)

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

新年彩蛋之中大奖

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

垃圾回收之引用计数

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

gRPC入门

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

Float的基本介绍

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

探讨分布式ID生成系统

2019-01-11
阅读 3 分钟
2.4k
全称Universally Unique Identifier,UUID占128bit,也就是16个英文字符的长度(16byte),需要强调的是,它的生成无需中心处理程序。

Gin使用

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

How to use godog

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

Git清空操作

2018-12-20
阅读 2 分钟
6k
Note:在执行push操作前,所有的修改都发生在本地,可以使用reset随便回滚本地的提交。但要注意:本地修改一旦回滚,无法找回。在push后,想要回滚到指定的版本,便需要使用revert,这样的代价就是:你的回滚记录被记录在了log中,所有人都可以看见。

Net Transport

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

数据一致性(一)

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

Tcp Server Design

2018-11-04
阅读 1 分钟
1.5k
可以看到listen状态的请求连接。其中Local Address的*表示请求会被本地的任意地址处理(如果有多重地址的话)。Foreign Address中*.*表示客户端的ip和port都是未知的。

Go net 超时处理

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

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

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

CSS元素的显示和隐藏

2016-11-27
阅读 1 分钟
1.9k
DIV的占位存在,即通过Chrome能够找到DIV,但是图片的背景图却始终显示不出来。自己研究了好长时间才发现问题的所在,总结思考一下正确的分析问题的思路