用 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 | 同樣 |
這份教學的幾個刻意安排
- 大量 JS / Node / Express 類比:凡是 Go 跟 JS 寫法差很多的地方,都會附一個「🔁 JS 對照」小區塊。
- 漸進式 Docker(很重要):
- 開發階段(第 1 章起)只把 PostgreSQL 放進容器,Go app 仍用本機
go run跑 — 改 code 立刻生效,最順手。 - 最後一章才把 Go app 也容器化,串成可一鍵啟動的完整
docker-compose。
- 開發階段(第 1 章起)只把 PostgreSQL 放進容器,Go app 仍用本機
- 三層架構:
handler(接 HTTP)→service(業務邏輯)→repository(碰資料庫)。職責分明,貼近實務上工寫法。 - 每章都能驗證:每章結尾都有
curl範例與預期回應,確認這一步真的成功了再往下。 - 程式碼能實際跑:不用省略號帶過關鍵邏輯。
章節地圖
| 章節 | 檔案 | 內容 | 完成後你會有 |
|---|---|---|---|
| 第 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/register、POST /auth/login |
| 第 4 章 | 04-account-funds.md |
入金、餘額查詢 | POST /account/deposit、GET /account/balance |
| 第 5 章 | 05-stock-quotes.md |
記憶體假報價(順便學 interface) | GET /quotes、GET /quotes/:symbol |
| 第 6 章 | 06-place-order.md ⭐ |
市價買 / 賣,含餘額與持股檢查、DB transaction | POST /orders |
| 第 7 章 | 07-portfolio.md |
持倉與投資組合(含市值、損益) | GET /portfolio、GET /holdings |
| 第 8 章 | 08-transaction-history.md |
交易紀錄查詢、分頁、篩選 | GET /orders、GET /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 章 開始。