go

Go 网络处理中的几种错误

之前遇到了很多 timeout,但是仔细看错误提示好像不完全一样,于是就做了个简单的试验: Client 上看到的错误 找不到服务器(no such host)的几种情

在 Go 里用 reflect 和 ast 实现动态特征

Go 让人吐槽的点之一就是动态特性低,比如不支持泛型、反射鸡肋等等。所以长期以来一直觉得搞一些动态功能是一件很酷的事情。 这里主要做了两件事: 运行

Coding After 100+ Bugs

今年接手了一个新项目,不算vendor包,大概6W行代码,接的时候信心满满准备大干一场。结果半年内线上出了100多个bug。 粗糙统计下,80

Go项目在组织启动代码上的一次尝试

最开始的项目目录 $ tree . ├── ./api/ ├── ./service/ ├── ./dao/ ├── ./model/ ├── main.go func main(){ flag.Parse() artemis := NewArtemis(flag.String(`config`)) // artemis 是我们的框架,类似beego log.init() service.init() dao.init() worker.init() api.Route(artemis.Router) artemis.Run() } 写个测试吧 packege dao func TestGetNote(t *testing.T){

在 Go 里避免空指针问题

空指针异常 NPE 在所有编程语言里都是个很麻烦的事情,Go 在设计之初已经在尽力减少 null 的使用范围。但是由于 Go 刻意隐藏了值和引用的概念,使得很多新手在

Goption:一个针对 Go struct 的代码生成器

缘起 写代码里有个绕不开的话题就是如何写构造函数 Java 里有 JavaBean 作为标准,空构造参数 + 自定义的 setter C++ 里靠重载实现任意场景的构造 Python 里可以可以支持传你需要的

一个会导致 go build panic 的 bug

起因是因为犯懒,随手在一个函数体内定义一个类型 func foo() { type Article = map[string]interface{} } 看起来好像也很正常,突然有一天在 gowatch 的控制台里看到了 runtime: goroutine stack exceeds 1000000000-byte limit fatal error: stack overflow runtime stack: runtime.throw(0x1a556a1, 0xe)

Go Module 实践中的问题(持续更新)

项目逐渐都切到了 go mod,用的时候遇到了各种奇奇怪怪的坑,记录一下。 流程实践 语义化版本 Go mod 在设计时没有支持诸如 >2.0, ~3.4, ^4.0 这样场景的语法。而是以语

Json Iterator 在 swagger 下卡死程序的排查

迁移自简书,格式可能未经校对。 事件经过: 收到反馈测试环境某个服务打开 swagger ,进程会卡死 根据经验,初步判定是有死循环。 在本地启动该服务,打开 swagger ,发

Go encoding json 的几个坑

以前在引入第三包的时候,为了兼容性和定制扩展的考虑,一般会浅浅地封装一层。自从入了 Go 坑,发现连标准库也得小心再小心了。 decode(map) 之后 int 会变成 float64 思考一

整理一套 Go 的轮子

迁移自简书,格式可能未经校对。 Github:https://github.com/Kretech/xgo 缘起是因为 Go 的很多语法太啰嗦,也许 Go

好用的 Cache API

迁移自简书,格式可能未经校对。 最近看到了几种加缓存的方法,整理对比一下。 拿一个case来说,我们要去数据库取一条用户记录,迫于性能,还要加一

理想的数据库操作库

ORM 于创业项目快速迭代的重要性不言而喻。我也一直在不停地寻找更好的方案。 造了个轮子:Loulan-java 市面上有些不错的 orm 框架,诸如 Lara