序
应用 golang 开发了一阵子业务代码,本文次要梳理一下本人的应用感触,并总结一下罕用的类库,不便查阅。因为自己是 java 重度使用者,未免加以比照吐槽一下,请见谅。
go 做业务开发?
比照 java 这里说说用 go 做业务开发的感触:
-
长处
- 云原生首选,省内存
- 挺适宜写脚本的,可代替 python
-
毛病
- 没应用好会 panic,线上服务间接过程退出还挺重大的
- go 没有 maven 的 SNAPSHOT 版本,基于 commit hash 加日期作为伪版本,很容易呈现 invalid version,体验十分不好,不像 SNAPSHOT 这么省事
- 写面向对象比拟吃力,每个办法都要写个 receiver,不像 java 这么规整
- ioc 的反对不像 java 有 ioc 的规范,生态也不太行,比方 uber/dig,都无奈按 name 注入 map 构造
- godoc 太简陋了,没有 javadoc 那么规整
- 没有注解和泛型 (尽管新版反对了,然而要等周边生态反对了能力好好用上),语言表达力弱了很多
- 至于协程,业务开发貌似这个派不上用场
- 包的机制挺怪的,默认以最初一个为准,很容易抵触,也不容易辨识,若是加上别名,那更是劫难,十分不利于剖析
- 不足好用的 test suite,不像 java 的 juint,写几个注解就能够,挺吃力的
golang 常见类库
-
参数校验
- go-playground/validator
-
测试加强
- testify
- gomonkey
- goconvey
-
类型转换
- cast
- go-conv
- copier
-
反射
- go-reflector
-
序列化
- mapstructure
- json-iterator
-
数据结构加强
- decimal
- atomic
- errors
- multierr
- gods
- go-datastructures
- golang-set
-
stream 操作
- go-funk
- go-linq
-
依赖注入
- di
- dig
- fx
-
微服务相干
- viper
- hdrhistogram-go
- hystrix-go
- sentinel-golang
- client_golang
- opentracing-go
- jaeger-client-go
- redislock
- entroq
总结
用 go 进行业务开发感觉老本还挺大,相对不是省内存,云原生这么简略的事件,如果是大公司,能够用钱去砸,我没话说。中小公司如果本身团队不是 go 背景,想从零开始,感觉老本还挺大,集体愚见。