-
-
新的仓库: wklken/naming
上一次开新项目, 还是 wklken/httptest, 还有很多功能没有完善 后来, 又fork了gorequest来了一回大修 wklken/gorequest 这次本来在写一片关于命名的文章, 然后花了几个小时 -
-
Better Code: 抽象: 可扩展性与可维护性的抉择
抽象程度 抽象程度高, 往往意味着: 灵活, 可扩展性高 但是, 这也同时意味着: 复杂, 可维护性低 而可维护性在一个项目的生命周期中又是非常重要的, 一次开 -
Better Code: 异常时, 该提示用户哪些信息?
接前一篇 Better Code: 更好的异常日志打印 做 toB 一个非常高的成本是, 用户的环境/网络/数据等, 可能跟你预期的差异很大, 再加上沟通相对困难(涉及三方/四方, -
Better Code: 更好的异常日志打印
维护一个 N 年前的Python项目, 协助排查问题时发现, 原先的日志打印真真一言难尽 导致了一个问题, 同负责的运维 A 沟通, A 与其对接的甲方沟通&h -
-
Go: go-redis/cache升级的坑
这是在做 Golang 项目中的一些实践 在做一个项目, 使用了 go-redis/redis 及 go-redis/cache 某个节点, 做了所有依赖包的升级. 在做缓存依赖包的升级时, 必须十分注意, 新版本的第三方包做 -
-
Go: gin validation
这是在做 Golang 项目中的一些实践 传统的校验方式 需要在获取数据后, 写很多if判断语句, 无法复用且非常罗嗦 if a != "" { } if len(a) < 10 { } gin 的参数校验 gin 使用了 -
-
Go: 开发过程中的一些bug
1. make slice 很容易漏掉中间参数, 引入 bug并且很难排查 package main import "fmt" func doCopy(a []string) []string { b := make([]string, len(a)) for _, i := range a { b = append(b, i) } return b } func main() { a := []string{"hello"} b := doCopy(a) fmt.Println(b, len(b)) } 得到结果 [ hello] -
-
Go: 一种error wrap调用链处理方式
这是在做 Golang 项目中的一些实践 背景 在做一套内部公共服务, 提供后台API调用的时候, 某些情况下, 会返回500错误, 此时有两种做法 在后台记录详细的5 -