乐趣区

关于golang:go微服务开发工具箱

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

退出移动版