一文让你知道为什么学了PHP的都要转学Go语言( 三 )

一文让你知道为什么学了PHP的都要转学Go语言

文章插图
 
在GO语言中,有一套标准的工程管理规范,只要按照这个规范进行项目开发,之后的事情(比如包管理、编译等等)都将变得非常的简单 。
在GO项目下,存在两个关键目录,一个是src目录,用于存放所有的.go源码文件;一个是bin目录,用于存在编译后的二进制文件 。在src目录下,除了main主包所在的目录外,其它所有的目录名称与直接目录下所对应的包名保持对应,否则编译无法通过 。这样,GO编译器就可以从main包所在的目录开始,完全使用目录结构和包名来推导工程结构以及构建顺序,避免像C++一样,引入一个额外的Makefile文件 。
在GO的编译过程中,我们唯一要做的就是将GO项目路径赋值给一个叫GOPATH的环境变量,让编译器知道将要编译的GO项目所在的位置 。然后进入bin目录下,执行go build {主包所在的目录名},即可秒级完成工程编译 。编译后的二进制文件,可以推到同类OS上直接运行,没有任何环境依赖 。
一文让你知道为什么学了PHP的都要转学Go语言

文章插图
 
GO语言的编程规范强制集成在语言中,比如明确规定花括号摆放位置,强制要求一行一句,不允许导入没有使用的包,不允许定义没有使用的变量,提供gofmt工具强制格式化代码等等 。奇怪的是,这些也引起了很多程序员的不满,有人发表GO语言的XX条罪状,里面就不乏对编程规范的指责 。要知道,从工程管理的角度,任何一个开发团队都会对特定语言制定特定的编程规范,特别像Google这样的公司,更是如此 。GO的设计者们认为,与其将规范写在文档里,还不如强制集成在语言里,这样更直接,更有利用团队协作和工程管理 。
API快速开发框架实践编程语言是一个工具,它会告诉我们能做什么,而怎么做会更好,同样值得去探讨 。这部分会介绍用GO语言实现的一个开发框架,以及几个公共组件 。当然,框架和公共组件,其它语言也完全可以实现,而这里所关注的是成本问题 。除此之外,抛开GO语言本身不说,我们也希望可以让大家从介绍的几个组件中,得到一些解决问题的思路,那就是通过某种方式,去解决一个面上的问题,而非一味的写代码,最终却只是解决点上的问题 。如果你认可这种方式,相信下面的内容也许会影响你之后的项目开发方式,从根本上提高开发效率 。
我们为什么选择GO语言选择GO语言,主要是基于两方面的考虑
  1. 执行性能 缩短API的响应时长,解决批量请求访问超时的问题 。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能 。而GO语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化 。依赖Golang的高性能HTTP Server,提升系统吞吐能力,由PHP的数百级别提升到数千里甚至过万级别 。
  2. 开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快 。通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑 。能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产 。

一文让你知道为什么学了PHP的都要转学Go语言

文章插图
 
很多人在学习一门新语言或开启一个新项目时,都会习惯性的是网上找一个认为合适的开源框架来开始自己的项目开发之旅 。这样并没有什么不好,但是个人觉得,了解它内部的实现对我们会更有帮助 。或许大家已经注意到了,所说的MVC框架,其本质上就是对请求路径进行解析,然后根据请求路径段,路由到相应的控制器(C)上,再由控制器进一步调用数据逻辑(M),拿到数据后,渲染视图(V),返回用户 。在整个过程中,核心点在于逻辑的动态调用 。
不过,对API框架的实现相对于WEB页面框架的实现,会更简单,因为它并不涉及视图的渲染,只需要将数据结果以协议的方式返回给用户即可 。
使用GO语言实现一套完整的MVC开发框架,是非常容易的,集成HTTP Server的同时,整个框架的核心代码不会超过300行,从这里可以实际感受到GO的语言描述效率之高(如果有兴趣,可以参考Uwork开源项目seine) 。
也有人说,在GO语言中,就没有框架可言,言外之意是说,引入一个重型的开源框架,必要性并不大,相反还可能把简单的东西复杂化 。


推荐阅读