Ruby 這一季的橋接已經證明可行:讀者能用 Mongory 的 DSL 操作任意 Ruby 結構,性能也在一連串優化後到位。接下來,筆者把目光放到 Go。這不是一時興起,而是「工程現場」與「使用者規模」共同推動的選擇
go get
會失手結論:Go 可以橋接,但要維持「對讀者無感」的體驗,工程上需要另闢蹊徑
go get
不踩子模組的坑現況的 mongory-go/
採「嵌入核心程式碼快照」的策略:
mongory-go/mongory-core/
內納入核心 C 程式碼與標頭,避免讀者 go get
時因 submodule 缺失而無法建置mongory-go/cgo/
提供橋接:
cgo/binding/include/
與 cgo/binding/src/
對應核心的公開標頭與來源*.go
封裝 matcher、value、memory pool 的最小可用 APImongory-go/mongory-core/
(維護者動作,讀者無需介入)讀者角度只需知道:Go 版會內含建置所需的 C 原始碼與標頭,不需要讀者額外準備 core 子模組
這些風險可控,而且有 Ruby 版的成熟設計可複用:memory pool、value wrapper、matchers 與 explain/trace 的邏輯均已成型
筆者會在後續篇章逐步分享:cgo 與子模組同步、反射與 converter 邊界、Go ↔ C 指標安全、Go GC × memory pool 協作、shock 與優化歷程,最後再談為何考慮 native Go 重寫
選 Go,不只是因為「大家都在用」,更是因為 Mongory 的抽象能把 Go 的長處(單檔部屬、效能、工具鏈)與既有的匹配引擎優勢結合起來。筆者相信,只要邊界拿捏正確,Go 版 Mongory 能像 Ruby 版一樣,帶給讀者「好用、可觀測、性能踏實」的體驗