Go 語言系列(十八):Kubernetes 部署

這是 Go 語言從零到 Web 應用系列的第十八篇,也是本系列的最終篇。我們將把前面建構的 Go 應用部署到 Kubernetes 上,學習容器編排的核心概念。 Kubernetes 基礎概念 核心元件 ┌─────────────────────────────────────────┐ │ Kubernetes Cluster │ │ │ │ ┌────────────────────────────────────┐ │ │ │ Namespace: default │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ │ │Deployment│ │ Service │ │ │ │ │ │ │ │(ClusterIP│ │ │ │ │ │ ┌──────┐ │ │ or LB) │ │ │ │ │ │ │ Pod │ │←──│ │ │ │ │ │ │ │┌────┐│ │ └──────────┘ │ │ │ │ │ ││容器││ │ │ │ │ │ │ │└────┘│ │ │ │ │ │ │ └──────┘ │ │ │ │ │ └──────────┘ │ │ │ └────────────────────────────────────┘ │ └─────────────────────────────────────────┘ 元件 說明 Pod 最小部署單位,一個或多個容器的組合 Deployment 管理 Pod 的副本數、更新策略 Service 為 Pod 提供穩定的網路端點 Namespace 資源的邏輯隔離 ConfigMap 配置資料(非機密) Secret 機密資料(密碼、token) 本地環境設定 使用 minikube # 安裝 brew install minikube # 啟動叢集 minikube start # 確認狀態 kubectl cluster-info kubectl get nodes 使用 kind(Kubernetes in Docker) # 安裝 brew install kind # 建立叢集 kind create cluster --name bookstore # 確認 kubectl cluster-info --context kind-bookstore kind 更輕量,適合 CI/CD 和快速測試。 ...

2026年2月24日 · 5 min · 971 words · Jack

Go 語言系列(十):測試與部署

這是 Go 語言從零到 Web 應用系列的第十篇。前九篇我們從零開始建構了一個具備 CRUD、資料庫、認證的完整 Web 應用。這篇要學如何測試和部署它。 Go 的測試工具 Go 有一個內建的測試框架,不需要安裝任何第三方套件。這是 Go 「電池已附」哲學的體現。 基本規則 測試檔案以 _test.go 結尾 測試函式以 Test 開頭 接受一個 *testing.T 參數 用 go test 執行 單元測試 基本範例 假設有一個 math.go: package math func Add(a, b int) int { return a + b } func Divide(a, b float64) (float64, error) { if b == 0 { return 0, fmt.Errorf("division by zero") } return a / b, nil } 對應的 math_test.go: package math import "testing" func TestAdd(t *testing.T) { result := Add(2, 3) if result != 5 { t.Errorf("Add(2, 3) = %d, want 5", result) } } func TestDivide(t *testing.T) { result, err := Divide(10, 2) if err != nil { t.Fatalf("unexpected error: %v", err) } if result != 5.0 { t.Errorf("Divide(10, 2) = %f, want 5.0", result) } } func TestDivideByZero(t *testing.T) { _, err := Divide(10, 0) if err == nil { t.Fatal("expected error for division by zero") } } 常用的 testing.T 方法 t.Error("message") // 記錄錯誤但繼續執行 t.Errorf("format %d", val) // 格式化版本 t.Fatal("message") // 記錄錯誤並立即停止這個測試 t.Fatalf("format %d", val) // 格式化版本 t.Log("message") // 記錄訊息(只在 -v 模式顯示) t.Skip("reason") // 跳過這個測試 執行測試 # 執行當前目錄的測試 go test # 執行所有套件的測試 go test ./... # 詳細輸出 go test -v ./... # 執行特定測試 go test -run TestDivide ./... # 顯示覆蓋率 go test -cover ./... # 生成覆蓋率報告 go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out 表格驅動測試 表格驅動測試是 Go 社群最推薦的測試風格。將測試案例定義為表格,用迴圈逐一測試: ...

2026年2月24日 · 6 min · 1217 words · Jack

WoW 私人伺服器 Docker 架設指南 (2025年版)

使用 Docker 方式架設 WoW 私人伺服器,比傳統方式更簡單、更快速、更穩定。本指南將教你如何在 Windows 上使用 Docker Compose 建立完整的 AzerothCore + Playerbots 伺服器。 🚀 為什麼選擇 Docker 方式? 主要參考來源: Docker 架設教學影片: https://www.youtube.com/watch?v=Giv4UUg9CyI AzerothCore 官方文檔: https://www.azerothcore.org/wiki/faq Docker vs 傳統安裝方式對比 傳統方式 (VirtualBox + Linux) Docker 方式 需要安裝 VirtualBox 只需 Docker Desktop 需要安裝完整 Linux 系統 使用容器化環境 手動配置 MySQL 自動配置資料庫 複雜的網路設定 簡化的網路管理 安裝時間:2-3 小時 安裝時間:30 分鐘 需要 Linux 知識 最少的技術門檻 Docker 方式的優勢 ✅ 極簡安裝 - 一個 docker-compose.yml 搞定所有服務 ✅ 完全隔離 - 不會影響主機系統 ✅ 易於備份 - 簡單的 volume 管理 ✅ 資源優化 - 比虛擬機更省資源 ✅ 快速重建 - 幾分鐘就能重新部署 ✅ 跨平台 - Windows/Mac/Linux 都能用 ...

2025年8月22日 · 10 min · 1931 words · Jack