用 Go 開發後端 API — 以「模擬股票交易 App」為貫穿範例

用 Go 開發後端 API — 以「模擬股票交易 App」為貫穿範例

這是一份為第一次寫 Go 的前端工程師寫的後端教學。我們會從零開始,一步步做出一個叫 no-logic-trade模擬股票交易後端:純後端 REST API,不含前端、不接真實券商或金流。所有報價都是假資料、所有撮合都是「市價即時成交」,重點是把「用 Go 寫一個有資料庫、有登入、有業務邏輯的後端」整套流程走過一遍。

名字 no-logic-trade 的由來:一個沒有真實撮合邏輯的交易後端 — 我們只模擬交易行為,不做真正的下單撮合。


技術棧

項目 選用 在 Node.js 世界的對應
語言 Go 1.22+ (Node.js / TypeScript)
Web 框架 Gin Express(地位幾乎一樣:路由 + middleware)
資料庫 PostgreSQL (同樣可用 PostgreSQL)
DB 存取 sqlx 類似 pg + 一點點 ORM 的便利,但仍是手寫 SQL
認證 JWT jsonwebtoken
設定管理 環境變數 .env dotenv
容器化 Docker + docker-compose 同樣

這份教學的幾個刻意安排

  1. 大量 JS / Node / Express 類比:凡是 Go 跟 JS 寫法差很多的地方,都會附一個「🔁 JS 對照」小區塊。
  2. 漸進式 Docker(很重要)
    • 開發階段(第 1 章起)只把 PostgreSQL 放進容器,Go app 仍用本機 go run 跑 — 改 code 立刻生效,最順手。
    • 最後一章才把 Go app 也容器化,串成可一鍵啟動的完整 docker-compose
  3. 三層架構handler(接 HTTP)→ service(業務邏輯)→ repository(碰資料庫)。職責分明,貼近實務上工寫法。
  4. 每章都能驗證:每章結尾都有 curl 範例與預期回應,確認這一步真的成功了再往下。
  5. 程式碼能實際跑:不用省略號帶過關鍵邏輯。

章節地圖

章節 檔案 內容 完成後你會有
第 0 章 00-go-primer.md Go 給 JS 工程師的快速入門:package、靜態型別、struct、error、interface、指標 + Gin Hello World 看得懂後面所有 Go 程式碼
第 1 章 01-project-setup.md 專案初始化、完整目錄結構、用 docker-compose 只起 PostgreSQL、最小 Gin server 一個會回 /health 的服務 + 容器裡的 DB
第 2 章 02-database-migration.md 用 sqlx 連線、自寫 migrator 建表 users / accounts / holdings / orders 四張表
第 3 章 03-auth-jwt.md 註冊 / 登入 / JWT / 驗證 token 的中介層 POST /auth/registerPOST /auth/login
第 4 章 04-account-funds.md 入金、餘額查詢 POST /account/depositGET /account/balance
第 5 章 05-stock-quotes.md 記憶體假報價(順便學 interface) GET /quotesGET /quotes/:symbol
第 6 章 06-place-order.md 市價買 / 賣,含餘額與持股檢查、DB transaction POST /orders
第 7 章 07-portfolio.md 持倉與投資組合(含市值、損益) GET /portfolioGET /holdings
第 8 章 08-transaction-history.md 交易紀錄查詢、分頁、篩選 GET /ordersGET /transactions
第 9 章 09-dockerize.md 把 Go app 容器化(multi-stage build)、完整 compose、一鍵啟動 docker compose up --build 跑全部

第 1 章會給出完整的專案目錄結構樹


怎麼讀這份教學

  • 照順序讀、照順序做。每一章都建立在前一章的成果上。
  • 每章開頭會先用 2–3 句說明「這一步在做什麼、為什麼」。
  • 跟著編號步驟一步步來,每段程式碼都有檔案路徑與逐段解釋。
  • 做到章節結尾的「驗證」段落,確認成功再進下一章。
  • 兩種閱讀格式:每章都有 .md(GitHub / 編輯器看)與對應的 .html(瀏覽器直接開、單檔自含、含語法高亮與目錄)。要重新產生 HTML:node .tools/build-html.mjs

全部做完後,一鍵啟動完整專案

跟著第 9 章完成後,任何人只要有 Docker 與一份 .env,就能:

docker compose up --build

一行指令同時啟動 PostgreSQL 與 Go API,自動建表、開始服務。


你需要先準備的東西

  • Go 1.22+(第 0 章會教安裝與驗證)
  • Docker Desktop(第 1 章開始會用到;現在還不用裝也行)
  • 一個你慣用的編輯器(推薦 VS Code + 官方 Go 擴充套件,會自動幫你格式化與檢查)
  • 終端機基本操作、會用 curl

準備好了就從 第 0 章 開始。