Learning Journey — Java 開發者的 Go 實戰紀錄
9
Steps
14
Go Files
5
Packages
PHASE 1 WebSocket 聊天室
專案初始化Step 00
go mod init + 安裝 Gin、gorilla/websocket
go modGingorilla/websocket
Gin HTTP ServerStep 01
第一個 Gin server,GET / 回傳文字
gin.Default()r.GETgin.Context
WebSocket 核心架構Step 02
Hub pattern — select 監聽多 channel、每連線兩個 goroutine
Hubselectgoroutinechannel
前端整合 + 首次聊天Step 03
瀏覽器聊天介面、StaticFS 路由衝突、writePump bug 修正
WebSocket JSStaticFSreadPumpwritePump
線上人數 + sendAll 重構Step 04
Hub 推送 Online count、抽 sendAll 消除重複、deadlock 修正
sendAlldeadlockfmt.Appendf
訊息時間戳Step 05
time.Now().Format("15:04:05") — Go 的 magic date
time.Formatmagic date
PHASE 2 認證與資料庫
Config 設定管理Step 06a
godotenv 載入 .env、dev / production 環境切換
godotenv.envAPP_ENV
PostgreSQL + User ModelStep 06b
GORM 連線、User struct(等於 JPA @Entity)、AutoMigrate
GORMPostgreSQLAutoMigrate
註冊 / 登入 API(三層架構)Step 06c
handler → service → repository 分層、bcrypt 加密
handlerservicerepositorybcrypt
JWT TokenStep 06d
GenerateToken / ParseToken、HS256 簽名、Login 回傳 token
JWTHS256Claims
JWT MiddlewareStep 06e
gin.HandlerFunc、c.Abort / c.Next、c.Set 傳值給下游
middlewarec.Abortc.Set
保護路由 + 前端重構Step 06f-g
Group + Use 控制 middleware、登入頁 / 聊天室 redesign
r.Groupr.UselocalStorage
PHASE 3 私訊與持久化
私訊功能Step 07
WebSocket JSON 協定、UserID map O(1) 查找、前端左右分欄
JSON 協定map[uint]*ClientSendToUser
聊天記錄持久化Step 08
Message model、SaveMessage / GetMessages、歷史訊息 API
MessageGORM WhereGET /api/messages

Deep Dive

Phase 1: Gin + WebSocket

Hub pattern、select、goroutine per connection、channel 廣播機制

Read more →

Phase 2: Auth + JWT

三層架構、bcrypt、JWT 產生解析、middleware chain、GORM

Read more →

Phase 3: Private Messaging

WebSocket JSON 協定設計、O(1) 用戶查找、訊息持久化

Read more →

Java → Go Cheatsheet

Spring → Gin、JPA → GORM、JWT、WebSocket 完整對照表

Read more →