求问,Golang 生态是否有能与 Rails 媲美的框架?
两个因素会阻碍 Golang 出现 Rails 这样的框架:
没实际做过,只是观察:
没有,golang 那么丑的代码怎么可能实现 rails?解析 json 还要写一堆配置文件,烦得一逼,改个字段,一堆文件要改 改完了还要重新编译看结果 象 rails 就贴一行 ActiveRecord::Base 然后放啥都能用,随便改
golang 就是 c 加了 gc 和一点高级数据容器 以方便 c 写不好的码农写 utils 定位就是工具集 所谓的高并发只有嘘头,国内需要高并发的公司和需要写业务的公司比例是多少?真正需要高并发的 bat 都有稳定运行多年的框架代码 犯不上重新用 golang 再写一遍,只有新创业的 saas 之类的小公司可能会试水一下 跟风的码农发现学完了 golang 根本找不到工作
同样的一个功能,用 rails 实现 3 天就完了,用 golang 来做要一星期,然后当初做选择的决策层觉得进度太慢,只好让码农 996 来凑,然后指着码农的鼻子说你看看人家用 rails 的公司做得多快,跟高铁一样,码农其实没什么想法,就想找个角落安静地写代码,写着写着忽然以头抢地,口吐白沫,倒地不起了
实际上 选择合适的解决方案可以达到事半功倍的效果,但是为了跟风赶时髦,最后的结果往往是事倍功半 做决策的看走眼了,导致决策失误,最后把责任转嫁推到普通员工身上 身边这样的案例太多了 最可怜的是跟风的码农,粹死的时侯都不知道为什么死的
现在的 golang 库的完善性和生态如果原本项目组织设计的好,一个中高级以上 golang 开发开发速度并不会你说的 3 天和一星期这么大的区别
为什么非要发展出 rails 这类框架,有 rails 还不够吗?
还是你想要 go 的性能,rails 的开发速度。
rails 的开发速度是快点,不过 rails 的部署成本真不低。
golang 2018 年 8 月正式宣布加的 modules 机制 原本项目组织设计的项目好大概率出现在 2018.8 月以后的新项目 小概率有可能是码农在 2018 年以前在自造轮子处理依赖管理 但是线上已经运行好好的项目的是不会让码农为了所谓代码优雅重构一遍的,就是码农愿意,老板也不掏钱
就算码农从 2012.3 月 go v1.0 发布开始写代码,按业内招聘要求 2 年以上开发经验的潜规则,要达到中高级的水平也要 3-5 年以后 中高级的码农维护旧项目无压力,开发新项目是撑不了长时间 996 的 当然要钱不要命以头抢地倒地不起的中高级码农也有 到地不起以后 中高级码农-- 新码农因为计生国策 + 女人无房不嫁 + 房贵限购 的组合拳下,在可以预见的 20 年内,新码农++ 是小概率事件,而且新码农越来越贵,技术不咋的,工资要求远超过中高级码农 中高级码农工资低,新码农工资高 工资倒挂将是长期新常态 按人穷志短的常理,工资高的新码农有钱了就更不愿意 996
这种利用 modules 机制完善库生态 + 中高级码农 996 的组合拳 集中所有优势集中到一个时间点,好处都归我的假设只在理论中成立,实际中很少见
假设中高级码农的工资是 M 一般运维的工资是 Y 整个项目需要的工作日天数是 T 李会计拿着 excel 表的公式 T * (M+Y)=? 问老板选什么,并且嘱咐"听别人说 rails 的开发速度快点,golang 部署约等于拷贝文件,部署成本低 几乎可以忽略不计 " 聪明的老板就选了 rails 脑子不好的老板模糊听到了 'golang' '成本低'几个关键字 就选了 golang 回家以后躺在床上一细想,突然一拍脑袋发现不对劲 然后面色铁青,一言不发,在房间里不停地来回踱步,彻夜无眠
第二天一大早召集全休员工开会,会上发言:“鉴于公司遇到了前所未有的挑战,全体员工要与公司共克时艰 我宣布 从即日起,公司实行全员 996 作息时间表 特别是技术部的同事,要自愿降薪并内心高兴"
我想表达的是,国内用 go 比较广泛的公司是字节,学了 go 可以来字节试试。字节内部绝大多数在线服务都是 go 写的,也有很成熟的微服务框架支持。至于 996 不在讨论范围之内。
写了几年 golang,带着强烈的鄙视开始使用,极其不爽其语法笨拙,后来也就写习惯了。受 rails 影响,项目中也用反射写各种魔法。写了魔法就需要同事去看源码,违背了 go 作为静态编译型语言的优势。 各有优劣吧,再讲究的人用 go 也写不出多漂亮的代码,就一个 for 循环,大家都一样,比较适合团队协作,掩饰像我这种菜鸡的技术水平。
在 8 年前我就预言过,go 语言是一个泡沫,go 语言的推广是一场营销盛宴 https://ruby-china.org/topics/14407
现在我仍坚持以前的观点,不信再等 8 年后来看
如果你想什么都能做并且还适合的话 我建议 Java,用一个语言尽量利用它的特性设计程序,go 写微服务,私有部署都挺合适的,做管理台(一般用 rails 比较复杂的情况)你可能会很难受 服务尽量用数据和接口做关联 没必要强制绑定语言