config.md - maoxiaoyue/hypgo GitHub Wiki
Config Package (pkg/config)
config 套件提供一套靈活、強大且結構化的配置管理方案,專為 HypGo 打造。支援讀取 YAML 設定檔、環境變數擴充、參數驗證,以及物件預設值的處理。
主要功能
- 支援 YAML 與反序列化: 透過
mapstructure以及yaml標籤,可輕鬆地將設定檔映射到結構體。 - 靈活配置來源:
LoadConfig方法允許從給定路徑讀取設定檔並載入到應用程式中;如果該路徑沒找到配置,將拋出錯誤。 - 介面隔離設計: 定義了一系列介面(如
ConfigInterface,ServerConfigInterface,DatabaseConfigInterface,RedisConfigInterface,LoggerConfigInterface),讓配置物件的使用能有明確的約束並提高可測試性。 - 支援讀寫分離配置: 提供
ReplicaConfigProvider以及DatabaseConfig.Replicas配置,輕鬆設定多部讀取副本(Read Replicas),也可輕易退回主庫(Primary)。 - 進階驗證支援: 整合
@maoxiaoyue/hypgo/pkg/json內的校驗工具或其他校驗策略,驗證設定檔配置是否必填或符合規定格式。
基礎使用
以下範例會示範如何載入一個名為 config.yaml 的配置檔案:
package main
import (
"log"
"github.com/maoxiaoyue/hypgo/pkg/config"
)
func main() {
// 假設有 config.yaml
cfg, err := config.LoadConfig("config.yaml")
if err != nil {
log.Fatalf("無法讀取配置: %v", err)
}
// 確保設定的數值都有預設值墊底
cfg.ApplyDefaults()
log.Printf("Server 將啟動於 %s", cfg.GetServerConfig().GetAddr())
}
配置結構
配置主要分為三大區塊:
- Server: 設定伺服器連線、Protocol (HTTP2/3 等)、TLS,以及 Graceful Restart 等。
- Database: 定義連線驅動、DSN、連線池設定,甚至是 Redis 與多部 Data Replicas 的設定。
- Logger: 管理輸出的日誌層級、格式、輸出目的地等等。
例如 config.yaml:
server:
addr: ":8080"
protocol: "HTTP/1.1"
database:
driver: "mysql"
dsn: "user:pass@tcp(127.0.0.1:3306)/dbname"
logger:
level: "info"
format: "json"
預設值參考
如果沒有提供某些參數,呼叫 cfg.ApplyDefaults() 時預設:
- Server
addr為:8080 - Server
protocol為HTTP/1.1 - Read/Write Timeout 為
10/10 - Logger
level為info - DB MaxIdle/Open Conns 等也有內建預設參考