Golang中一些知识高阶知识点的梳理
由于自己的新课程要上线,需要一个答疑的社区,因为自己的项目现在已经比较复杂了。比如说在线教育系统我用的是django做的开发,并用用了uwsgi的方式协同着nginx做的部署,而我的整体的爬虫系统,也可以理解为流量变现系统,采用的是基于colly的爬虫以及类似于python方式的零散使用,比如各种各样的脚本(之前我都是习惯于用python来做这件事的,但是现在已经习惯了用golang的方式),而我的收款微服务是基于java进行开发的,现在整套CICD已经处于完备的阶段,但是不准备部署到线上,暂时业务的体量感觉是没有必要的,总之,业务类型还是比较庞杂的,但是业务体量不够大,没必要很多业务做微服务化,增加了业务的复杂程度,短期内也无肉眼可见的可观收益。
由于golang使用时间用的比较多,所以有些经验想做一个梳理,也方便自己更深刻的理解。
如果你做golang开发,没有深入使用过channel来实现业务执行顺序的管控的话,那么,你可能对于golang一直强调的一句话,叫做“不要通过共享内存来通信,而要通过通信来共享内存”大概是不会理解深刻的。由于golang是基于csp,即非阻塞式的并发控制模式来做的语言建构,而这种语言建构是建立在诸多已经存在于市面上被广泛使用的语言的一些痛点来设计的,所以,你会发现好多开发语言存在的坑,golang都有效的避免了。比如说python是不能纯粹的跨平台的,不同机器上面你都必须安装匹配版本的运行环境,你手里在某平台上顺利跑通的某份代码,才可能在这个平台上跑通。java就更重了,jvm虚拟机的存在,对于java性能的调教由于深耕多年的原因已经达到了前所未有的性能释放程度,但是为了支持语言而制订了一套适用于java运行的环境,基于“如无必要,勿增实体”原理,引入的东西越多,业务流程中涉及的旁线越繁杂,对于该平台的调优以及排错能力的要求也越高,java生态还是一如缕往的稳定,也是之前很多解析型语言在时代发展至今选型回java的原因,一方面是解析型语言可能更适合快干猛上的web时代,而这个移动互联网时代,更多后端服务存在的目的是给应用做支撑,所以高性能及提供服务的稳定性、健壮性就成了很多公司更加关注业务要点,而解析型语言天然的弊端就显现了出来,如何能让更小的代价,支撑更大体量的业务,这是许多公司都苦苦追寻的唯愿心法,而golang的出现恰逢其时。
如果你用golang写过表格驱动测试,你一定对于它的简洁和测试结果评估的种种工具印象格外深刻。golang本身就提供了基于性能测试和性能测试的有效规范和使用方式,并能根据测试结果生成对应的执行分析图(尤其是在性能测试中),这对于一些对性能要求高的服务,简直是优化性能的地图,拿着它就知道该在何处发力,把消耗时间大的部分作为优化的重点,可以最大化的提高系统对外提供服务的能力。针对于数据测试,可能对于接口请求响应中使用比较多,但是这也只是单纯的数据测试,golang还支持把这些数据真正模拟到运行服务环境中,以http对外提供接口的方式来应对数据测试,这样可以把数据本身以外,网络,带宽,服务潜在的其他等不可控因素也涉及进来,让整个测试维度更大,覆盖面更方,测试的结果也更具实践性。
resource id=‘2’ type=‘curl’