聊聊Rails和Golang開發的體驗差別
最近在用Golang開發Web後臺, 前端用 ReactJS 或者微信小程式框架.
單從微信小程式框架的感覺和設計思路來看, 和 Vue.js 非常像, 這種前端框架, 的確是用 Golang 做為後端開發更好一點.
就拿現在我正在用的 Gin 這個 Golang 框架來說, 其實只用幾十行寫個路由返回微信小程式用的 JSON 資料就可以了, 基本上所有的介面效果都由小程式去渲染, 後臺服務可以做的很薄:
- 設計好資料庫
- 理清需求和業務邏輯
- Golang從資料庫和HTTP路由請求, 按照 Restful API 規範返回 JSON 資料即可.
因為 Golang 的 HTTP 庫設計的非常好, 所以基於 Golang HTTP 庫的Web框架多如牛毛, 大多數Web框架都很輕, 主要的功能都在路由設計上.
所以如果拿 Rails 和 Golang 做對比的話:
- Rails 更像一個Web最佳實踐的全功能框架, 什麼都有最好的, 但是因為包括的東西實在是太多了, 光是學清楚每個最佳實踐庫的配置和整合就很複雜, 因為 Rails 真的要配置好的話, 不同模組之間的整合往往都是不透明的, 你首先要學會這些配置, 只有看了原始碼才知道為什麼一定要這麼配置才能功能
- Golang 框架和Rails是反的, 框架只有核心的 HTTP 路由功能, 至於高階功能, 比如HTTPS, 表單Token驗證, JSON解析, 資料庫的ORM等等, 都需要網上去找庫和中介軟體實現, 但是每個模組之間的膠水程式碼都是自己寫的, 所以模組之間關係處理都比較透明, 出了錯好解決到問題的根源
簡單的結論:
- Rails更適合做傳統偏向內容的Web網站構建, 約定好的配置入門比較簡單, 開發效率高, 但是要玩精通還是比較複雜, 受到框架限制比較多
- Golang更適合前後端分離的應用開發, 比如小程式, 高階功能入門比較複雜, 但是一旦折騰好了, 可以很容易玩出高階功能, 不用受到嚴格框架的限制
像我這種Emacs黨, 說句實話, 我更喜歡Golang這種框架, 雖然很多功能都需要自己折騰, 但是可以做到很多細節心中有數, 每個模組的最佳實踐可以隨著自己的經驗增加而快速迭代, 而像 Rails 這種每個大版本引入的新的最佳實踐都會和上一版本不相容, 團隊和業務程式碼多了, 更新程式碼去相容最新框架本身就很痛苦.
最近開發了微信小程式, 感覺Web也像三國一樣, 分久必合合久必分.
- 最開始是 Java 這種簡單粗暴的中介軟體玩法
- 過去十年大多數都是 Rails 這種更加優雅的 Web 框架, 強調最佳實踐, 強調 Web 純正的方法論
- 現在移動終端的效能、多解析度和使用者體驗的新需求, 大家又回到Java那個時代的前後端分離了
其實, 計算機這麼多年的軟體框架一直都是隨著流星硬體和使用者互動模式的遷移而不斷變化和不斷重複歷史.
對於我這種作業系統行業打拼出來的人, Golang這種Web框架的思路對於我更簡單, 設計好資料庫和API介面, 剩下的就是把後端資料吐給前端框架就完事了.
所以, 業務導向, 什麼技術對於業務最好就用什麼技術, 對於小程式開發, 我選擇 Golang Web框架.