|
Post by account_disabled on Jan 30, 2024 3:56:34 GMT
这篇关于从 PHP 迁移到 Go 的文章首先在其他地方发布,并在作者许可的情况下在此处重新发布。地鼠追赶大象 今年早些时候,我做出了一个可以说是糟糕的商业决定。我决定用Go重写为Boxzilla提供支持的Laravel应用程序。 不过不后悔。 Boxzilla 平台页面 几周后,我就部署了 Go 应用程序。构建它是我几个月来最有趣的事情,我学到了很多东西,最终的结果是比旧应用程序有了巨大的改进。更好的性能、更轻松的部署和更高的测试覆盖率。 该应用程序是一个相当简单的数据库驱动的 API 和帐户区域,用户可以登录以下载产品、查看发票或更新付款方式。 Stripe和Braintree用于接受订阅付款。发票使用MoneyBird处理,一些交易电子邮件使用Mailgun发送。 虽然 Laravel 在这方面工作得足够好,但有些事情对我来说总是感觉过于复杂。每隔几个月发布一个新的“主要”版本是怎么回事?如果新版本包含重大改进,我会很好,但很多时候,对我来说,这只是轻微的命名和目录结构更改。 为什么去? 去年,我已将多项服务迁移到 Go,所以我对这门语言并不是完全陌生。作为一名销售基于 WordPress 的产品的开发人员,我的部分工作是在主要关注最终用户的古老技术堆栈中工作。 如果我不是自雇人士,我只会申请一份新工作来弥补性感技术的缺乏。作为我 WhatsApp 号码数据 自己的老板,我有责任让自己的日常工作变得有趣,而不仅仅是追逐更直接的金钱。如果收入允许(确实如此),为什么不享受一点乐趣呢? 编写 Go 代码是一种乐趣,工具很棒,不仅开发速度快,最终结果通常也快得惊人。只是阅读了Go 项目的目的,我就对这门语言产生了兴趣。 我认为未来几年我们会看到很多人从 PHP、Python 和 JavaScript 等动态类型语言转向 Go。 移植代码库 将代码迁移到 Golang 主要包括获得正确的数据库交互以及将 Blade 模板移植到我们可以在 Go 中使用的东西。 ORM 总是会妨碍我,所以我选择了可模拟的数据访问层和简单的 SQL 查询。 Meddler用于消除一些将查询结果扫描到结构中的样板文件。 为了支持分层模板和部分模板,我开源了grender,它是 Go 标准 html/template 包的一个小包装器。这使我能够相对轻松地将 Blade 模板文件移植到 Go,因为我可以使用相同的层次结构和部分模板。 为了与 Stripe 集成,有官方的stripe-go包。对于 Braintree,有一个非官方的Braintree-go软件包,该软件包曾一度被忽视,但最近又重新受到关注。由于 Moneybird 中还没有用于管理发票的 Go 包,因此我。 比较苹果和橙子 由于 Go 是一种编译语言,拥有比 PHP 更好的标准库,因此像我即将要比较的两种语言并不公平。也就是说,我认为分享一些数字会很有趣。 表现 wrk用于对返回登录页面 HTML 的两个应用程序执行一些简单的 HTTP 基准测试。 并发性 平均。潜伏 请求/秒 传输/秒 拉维尔 6毫秒 一旦我将并发“用户”数量增加到超过 应用程序(或 PHP-FPM 套接字)就会不断崩溃。
|
|