go-like
go-like 是一套給 TypeScript 後端使用的 Go 風格微服務工具套件。它把生命週期、Context、服務呼叫、服務探索、訊息、設定、儲存、健康檢查與可觀測性拆成清楚的小套件,不會要求團隊把現有框架或 runtime 全部換掉。
可攜式程式碼只依賴標準 Web API,像是 Request、Response、Headers、AbortSignal、Web Streams 與外部傳入的 fetch。Node.js、Bun 專屬能力會放在獨立入口。已經匯出 Fetch 的框架不需要 go-like adapter 套件:Hono、Elysia 與 H3 2.x 的 app.fetch 可以直接交給 @go-like/web;H3 1.x 使用 toWebHandler(app)。Croner、BullMQ、NATS、Pino、Winston 等資源才使用生命週期適配器。
第一次閱讀建議從開始使用開始,再按診所預約:從 0 到 1依里程碑走過引導專案。已經有現成服務要導入時,可以看遷移與導入;想知道 go-like 和其他工具各自負責什麼,請看工具比較。
想知道每個套件與 provider 到底負責什麼,就看套件與 provider 參考和套件參考;想確認哪些能力真的跑過測試,而不是「照理說應該可以」,請看驗證。
選一條閱讀路線
- 初學者: 先看開始使用,再走診所預約專案,先跑通 Handler、ready 訊號與停止。
- TypeScript 或 Go 專家: 先讀架構,再讀服務呼叫與套件與 provider 參考,先確認 ownership 和終態。
- 框架使用者: 先看工具比較,再看遷移與導入,保留原本的 router,只導入需要的邊界。
這裡所說的 Go 風格
會阻塞的工作把 Context 放在第一個參數、資源由誰持有要講清楚、停止後要有穩定終態,小介面則透過結構型別實作。這不代表硬搬 Go 的命名或 channel;TypeScript 仍使用自然的 export,第三方套件特有語意也保留在原生物件上。
@go-like/protoc-gen-like 基於 Protobuf-ES 產生 Context-first Protobuf RPC 程式碼。@go-like/transport-grpc-buf 的 Fetch 入口支援 Connect/gRPC-Web unary 與 server-streaming;/native 提供標準 gRPC 的四種呼叫形態,包含 client-streaming 與 bidi。這是獨立於內部 Fetch/SSE 路徑。
Node 26.12.1 與 Bun 1.4.4 的託管 gRPC 已通過慢速消費者 drain 回歸測試;Connect 2.1.2 與 Bun 1.4.2 Fetch 的歷史取消與停機限制仍未驗證已修復。