对任何事物的认知都是螺旋上升的过程。
编辑器
vim-go和coc.nvim两个vim插件结合使用,体验非常棒。
coc.nvim是年初才发现的,它打通了vscode的插件,给vim带来了非常好的体验,不仅仅可用于golang,其他任何语言,只要是vscode支持的,基本都可以安装对应的coc-XXX插件,强烈推荐!
自己的vimrc项目也进行了一次大的更新,在易用性上已经和各类IDE差距不大了,在专注、简洁和速度等方面,个人觉得已经超过了IDE。
playground
除了官方playground,repl.it是一个非常好的替代,repl.it不光支持golang,还支持非常多的其他语言,而且编辑器支持智能提示,还提供基于web的shell,强烈推荐!
go mod
经过近2年的发展,golang的模块系统也逐渐成熟。国内也出现了goproxy.cn等代理,速度也是杠杠的。
非常喜欢go mod tidy
,太好用了,是不是?
package organization
当写一个比较复杂的项目时,对包的组织非常关键。golang中是不存在子包概念的,意味着aaa.com/x/y
和aaa.com/x/y/z
是两个完全独立的包。
包之间不能循环依赖。个人摸索的一个比较好的原则是:路径短的包依赖路径长的包。aaa.com/x/y
可以依赖aaa.com/x/y/z
。有这个原则后,碰到的很多代码组织问题就解决了。
complex util-type project scaffolding
当编写比较复杂的工具类项目时,不要自己从头写了,使用cobra提供的代码生成工具来初始化。它不光提供了此类项目代码组织的最佳实践,对于配置,也提供了基于viper的解决方案。个人觉得cobra是对12-factor原则的好的实践。
教训
自己写一整套web框架
自己练习是可以的,但是在正式项目中,还是保守点好,使用gin是一个很不错的起点。
先实现,有时间再优化。
…