laravel 转 golang 最佳实践是?

2020-04-14 10:40:37 +08:00
 skyworker
各位大神, 目前我司的后台系统是 php 的 laravel 框架, 目前体验非常好, 本来没必要换 golang, 不过有如下痛点, golang 能解决:

1. 我司的产品是私有化部署给客户的, PHP 由于是动态语言, 天生加密性不好

2. PHP 作为 web 语言目前在企业端口碑没有 JAVA 之类的"企业级"名声好听(很多客户反馈,PHP 不是做网站的, 还能做系统?), 这个其实无所谓的,希望不要拿这一点批判我...

2. golang 所谓的"高并发"对我们目前的项目而言, 意义不大. 16GB 内存的服务器, 一天的 PV 可能不超过 100. 主要是数据结构复杂和业务逻辑复杂.

大致看了 golang 的一些 web 框架(主要是 ORM),发现一些问题:

1. 毕竟是强类型语言, 在定义 model 的时候, 还要定义类型, 略微麻烦. 在 laravel 的项目中, 因为是弱类型, 所以客户在系统中可以自定义新字段, 直接 post 到后台, laravel 就能直接保存了, 例如:

POST 内容:

{
"name": "tom",
"age": 12,
"content": "1111"
}

在 laravel 中, 只需:

$data = $request->all();
$user = new User($data);
$user->save();

在 golang 的 ORM 中, 好像没有这么简单(实际案例中, POST 字段可能有 30 多个), 一个一个字段设置, 麻烦.

2. 在 laravel 中,为了便于扩展, model 有很多 json 类型的数据(mysql 支持 json 类型字段), 例如 user.extra 是 json 类型. 只需要在 larave 的 model 中设定:

protected $casts = [
'extra' => 'array',
];

在 CRUD 的时候, 都可以自动将 输入 /输出 信息,保存为 json 字符串 /或者 php arrray 类型. golang 现有的 orm 好像都不支持.


3. 其他的小功能. 例如我们的系统中, 需要将每个 model 被修改的内容记录下(例如, update 的时候, 知道哪些字段被修改了), 例如 user 的 name 被从'tom', 修改成了 'joe', 在 laravel 中, 只需要:

$newData = ['name' => 'joe'];
$user->update($newData );

//修改内容

$change = $user->getDirty();

['name']

$orign = $user->getOriginal('name') // tom

在 golang 的 ORM 中, 类似功能也是没有的.


举了几个小例子, 感觉 golang 的相关 tools 中,至少 orm 这块内容, 相对于 laravel 来说, 还是不完善的. 基础的 CRUD 肯定没问题, 不过相对于 laravel 的 orm 来说, 就有点 奔驰 换 桑塔纳 的感觉了.
6810 次点击
所在节点    Go 编程语言
60 条回复
LoNeFong
2020-04-14 10:45:23 +08:00
如非必要,就不要换
lhx2008
2020-04-14 10:46:19 +08:00
ORM 和 JSON 这块这块很麻烦,laravel 太随便了,怎么写都行。

转的意义不大,看管事的人怎么背锅了
b821025551b
2020-04-14 10:49:18 +08:00
pv 不超过 100 ?还没测试环境压力大,你折腾它干嘛?
zjsxwc
2020-04-14 10:51:56 +08:00
如果只是因为 “我司的产品是私有化部署给客户的, PHP 由于是动态语言, 天生加密性不好”
可以用 zephir 把 php 代码变成 二进制 so 拓展,提供给别人
ArJun
2020-04-14 10:54:48 +08:00
https://xueyuanjun.com/ 这位大佬也是 laravel 转 go
lniwn
2020-04-14 11:01:55 +08:00
你这种需求,如果非要转 go,可能还得再看下 mongo 。
Rwing
2020-04-14 11:04:07 +08:00
考虑利用 db 支持的 json 类型,直接存到 json 类型里
Mohanson
2020-04-14 11:10:38 +08:00
"net/http"
yc8332
2020-04-14 11:24:08 +08:00
如果只是代码加密问题,都给他搞成二进制不就好了。缓存 opcache,不需要给代码的。只要有代码文件名就行了。
airplayxcom
2020-04-14 11:26:25 +08:00
这么说吧 开发成本与维护成本 你选哪一个
hantsy
2020-04-14 11:36:14 +08:00
转 GO,编程体验就像回到了 PHP 4 。
hantsy
2020-04-14 11:37:27 +08:00
laravel 你为什么要用弱类型,PHP 完全可以按强类型 OOP 那一套来写程序。
dilu
2020-04-14 11:46:10 +08:00
讲道理,如果不是性能 如果不是安全和方便部署,go 在 web 开发这里没有一毛钱的优势

不要为了转而转
skyworker
2020-04-14 12:04:46 +08:00
@lniwn mongo 就算了, 当年赶时髦尝试过 egg js + mongo 的搭配, 简直是巨坑, 老老实实换成了 laravel + mysql 5.7
skyworker
2020-04-14 12:05:31 +08:00
@zjsxwc zephir 研究过, 不过目前的 php 逻辑是在 laravel 的 app, 目前还没 google 到类似案例
skyworker
2020-04-14 12:06:22 +08:00
@yc8332 目前还没有完美的 PHP 加密方案, 不信你去 taobao 搜索 "PHP 解密", 任何当前的 PHP 加密都能 1 块钱解密
Rwing
2020-04-14 12:06:30 +08:00
题外话,考虑一下 c#
skyworker
2020-04-14 12:07:01 +08:00
@hantsy 深有同感, 是不是有这个感觉的人都不敢说出来...
skyworker
2020-04-14 12:08:07 +08:00
@Rwing .net core 起一段时间看过, 不过毕竟 MS 整天虎头蛇尾, 绑定到 MS 的战略上, 很有可能当炮灰
skyworker
2020-04-14 12:08:55 +08:00
@dilu 没有, 纯粹就是探讨下, 看大神们有啥意见

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX