laravel 转 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 来说, 就有点 奔驰 换 桑塔纳 的感觉了.