应用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背景,想从零开始,感觉老本还挺大,集体愚见。