摘要:
记一次线上事故排查 具体场景简介: 目前有一个数据同步的场景(Mongodb → ES) 架构模型如下: 遇到的问题: 任务消费到某一时刻,就会hang住,无法继续消费,channel队列满了以后,导致整个同步任务全面停止 可以很明显的看到已经hang住了,并且最后一条日志明确的显示是阻塞在发送任务 阅读全文
摘要:
body, _ := c.GetRawData() // 获取原body数据 // 将原body塞回去 c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) 阅读全文
摘要:
转自 "aggregations" : { "<aggregation_name>" : { <!--聚合的名字 --> "<aggregation_type>" : { <!--聚合的类型 --> <aggregation_body> <!--聚合体:对哪些字段进行聚合 --> } [,"meta 阅读全文
摘要:
go 常用工具链 golint 代码质量检测 可以简单指定文件名或者目录检查代码目录规范 golint 会检测的方面: 变量名规范 变量的声明,像var str string = "test",会有警告,应该var str = "test" 大小写问题,大写导出包的要有注释 x += 1 应该 x+ 阅读全文
摘要:
<head>:<scope> <body> 提交频率 只要我对项目进行了修改,一通过测试就立即 commit。比如修复完一个 bug、开发完一个小功能,或者开发完一个完整的功能,测试通过后就提交。 我们规定一个时间,定期提交。这里我建议代码下班前固定提交一次,并且要确保本地未提交的代码,延期不超过 阅读全文
摘要:
go 简单实现heap go有一个线程的heap接口 实现简单的方法即可实现heap container/heap/heap/Interface type Interface interface { sort.Interface Push(x interface{}) // add x as ele 阅读全文
摘要:
option 选项模式已经很常见了 这里不再赘述 → 场景: 比如一个函数 需要一个当前时间 又想测试的时候控制传入的当前时间 func Demo(t ...time.Time) { // 如果不传入参数就使用当前时间 // 如果传入就是用传入时间 tt := append(t, time.Now( 阅读全文
摘要:
检查是否 xxx.proto文件设置 option 导出路径属性 option go_package = "./;errors"; 加上即可 阅读全文
摘要:
Go编译工具 go build <编译文件> 附加参数 备 注 -v 编译时显示包名 -p n 开启并发编译,默认情况下该值为 CPU 逻辑核数 -a 强制重新构建 -n 打印编译时会用到的所有命令,但不真正执行 -x 打印编译时会用到的所有命令 -race 开启竞态检测 # 无参数模式 $ go 阅读全文
摘要:
需要自己实现 MarshalJSON和UnmarshalJSON方法,如果只需要存或者取,实现一个也可 type Date struct { time.Time } func (d *Date) MarshalJSON() ([]byte, error) { return []byte(fmt.Sp 阅读全文