Go 语言如何去解决 Web 开发人员面临的众多问题?

坦白的说,我的团队非常厌恶我对 Go 语言传道的方式,每当我们团队的代码库出现问题时,他们希望我用一种更委婉的方式提出。

我学会的第一门编程语言是 PHP,这是个优秀的语言,我可以用它很快地构建 Web 应用程序,这些应用程序也能够达到预期的效果。但是我注意到,为了使其可用,我会花费大量的时间来关注缓存。

我也发现自己依靠很多第三方库来做一些更复杂的任务,比如队列,Web Sockets 等等。我发现自己使用了 Pusher,RabbitMQ,Beanstalkd 等等。

这让人感觉有点不好。在使用 Ruby,Node 和 Python 的时候,会出现类似的问题。在并发性、 WebSockets 和性能方面,这些语言会让人感觉到它们是不完整的。

我需要完全依赖框架和大量文档、“语法糖”、DSL,坦率地说,它们经常会带来很多非常占用空间的东西。

我开始把目光转向 Go 语言。

首先 Go 是一种的静态类型语言,我一直都喜欢这种方式。所以我学的非常快。Go 是一种偏底层的语言,你会遇到指针和内存引用等问题。

我之前曾经涉足 C 语言,而 Go 感觉和 C 很像,但是 Go 提供的标准库非常强大且易于使用,所以我对 Go 语法的精炼扼要感到震惊。

在深入研究之后,我决定研究 Go 是如何解决 PHP 编写 Web 应用 / API等出现的一些问题。

如何去解决 Web Sockets?Go 有几个很出色的库文件。下面是一个 Gin 框架使用 Gorilla websockets 库的例子…

并发

在 PHP 中,我不得不要么使用一些黑客手法运行线程,比如使用 将一个任务委托给一个新的线程,或者使用一个单独的服务,比如 Beanstalkd 或者 RabbitMQ。

不过,你只要在需要并发功能的函数前加 的关键字就可实现。 例如…

或者你可以使用 channel…

我将之前一个上传图片到 s3 的耗时任务放到 goroutine 中去实现接近即时的上传效果,没有第三方服务,完全本地。对于大多数开发人员来说不那么令人印象深刻,但是对于 PHP 背景的开发人员来说,我对 Go 的易用性和性能提升感到震惊。

测试

单元测试在 PHP 或 Javascript 中可能会有点痛苦。有无数不同的测试框架,但没有一个能够像 go built 命令去如此简单自然的进行测试。

main.go

现在我们的测试, main_test.go

所有我需要做的是运行 ,然后我得到了…

是不是非常的简单?

运行速度

在用 PHP 写 RESTful API 时,我有非常多的 Symfony2 和 Laravel 等框架的使用经验。

没有预先着重考虑几个级别的缓存; 如内存缓存、操作缓存、全页缓存等。代码响应时间就会跟蜗牛一样。Ruby 如此的声名狼藉就是由于缓慢。

由于 Go 的静态类型,编译性质以及对并发的原生支持。 Go 运行起来特别快。

看看框架基准测试 ,实践是最好的证明。 Go 最受欢迎的框架是 Gin 和 Revel,它们在大多数测试中的排名要高于 PHP 或者 Ruby。

DevOps

关于 Go 我还注意到一些,这让我非常震惊,不需要部署成千上万的文件,或者配置 Web 服务器或者 php-fpm 等。甚至不需要在你的服务器上安装 Go。

一旦 Go 应用程序被编译( ),你只剩下一个小小的二进制文件。你只要去运行一个单独的文件。

Go 还有一个非常稳固的内置 HTTP 服务器…

语法

Go 的语法不像 Ruby 那样漂亮,或者像 JavaScript 一样简单。 但是它很简洁,它让人觉得更底层,但 Go 让人感觉强大,表现力强。我们都看过传统的 PHP 代码,并感到身体不适。 相比之下,Go 非常容易阅读。

Go 另一个令人难以置信的好处是,在你编写 Go 代码的时候,已经有了一个很好的“最佳实践”。

当然,PHP 有 PSR 标准等,但是它们相当新,开发人员采用它们的速度很慢。 而 Go 的语言设计者从一开始就明确了。

格式化工具 也内置在语言生态系统中,可以使用 ‘go fmt’ 来运行。

所以我的一点陋见就是为什么我完全沉迷于 Go,现在我不能再回到 PHP 了。

via: https://ewanvalentine.io/why-go-solves-so-many-problems-for-web-developers/

作者:Ewan Valentine

译者:Dingo1991

校对:rxcai

本文由 GCTT 原创编译,Go 中文网 荣誉推出

本文来自企鹅号 - Go语言中文网媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

SQL审核的整体设计和落地

SQL审核目前已做差不多了,整个过程其实看起来,要远比我们想的c/s服务调用要复杂的多。

2152
来自专栏Java架构师学习

数据库高可用实战案例:架构优化背景前期调研详细调研测试过程实施过程细节问题处理

2436
来自专栏java一日一条

大型网站架构体系的演变(下)

在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

721
来自专栏北京马哥教育

做Linux背锅2年,我总结了这六类好习惯和30个血的教训

一、线上操作规范 1.测试使用 当初学习Linux的使用,从基础到服务到集群,都是在虚拟机做的,虽然老师告诉我们跟真机没有什么差别,可是对真实环境的渴望日渐上升...

43812
来自专栏云计算D1net

云应用程序性能管理的四大金刚

应用程序一旦迁移到了云端,管理起来就变得更困难重重了。云应用程序性能管理和性能监控工具则可以帮助识别瓶颈及其他性能度量指标。 优秀的工具有助于确定是否可以将瓶颈...

2944
来自专栏大魏分享(微信公众号:david-share)

深度分析:为啥说API是IT的未来?

本文在第一节,参考引用了 刘国强 CA Technologies中国区技术总监的《到底什么是“API经济学”》文章部分内容。本文其他章节技术部分则参考了社区和红...

2632
来自专栏微服务

全面解读NoSQL数据库Redis的核心技术与应用实践

互联网和Web的蓬勃发展正在改变着我们的世界,随着互联网的不断发展和壮大,企业数据规模越来越大,并发量越来越高,关系数据库无法应对新的负载压力,随着Hadoop...

4026
来自专栏沃趣科技

备份重于一切:远离“Gitlab删库事件”,QBackup是你的最佳选择!

作者简介:孙朝阳 沃趣科技高级产品经理。 案发现场: Gitlab删库事件回顾 Gitlab是大家很熟悉的开源Git代码托管工具,国内公司大多使用社区版自行搭...

3748
来自专栏程序人生 阅读快乐

超实用的Node.js代码段(代码逆袭)

本书精选300余段Node.js代码,涵盖了服务器端脚本开发中的绝大多数要点、技巧与方法,堪称史上最实用的Node.js框架开发方面的参考书籍,是网站建设与服务...

1472
来自专栏云加头条

腾讯云“开发者实验室”与“DCDB”产品揽获工信部信通院两大年度奖项

11月17日,由高效运维社区主办的GOPS全球运维大会暨第二届中国运维行业年度盛典隆重召开,全球运维大会也是中国首个专属运维行业的盛会,面向互联网及传统行业的广...

1470

扫码关注云+社区

领取腾讯云代金券