46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package config
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"os"
|
||
)
|
||
|
||
type Config struct {
|
||
AdminToken string `json:"adminToken"`
|
||
AuthAPIURL string `json:"authApiUrl"`
|
||
|
||
// 数据库 DSN,为空时回退到测试数据库。
|
||
// 格式:user:pass@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
|
||
DatabaseDSN string `json:"databaseDsn"`
|
||
}
|
||
|
||
// 各环境默认 DSN。
|
||
const (
|
||
TestDSN = "mengyastore-test:mengyastore-test@tcp(10.1.1.100:3306)/mengyastore-test?charset=utf8mb4&parseTime=True&loc=Local"
|
||
ProdDSN = "mengyastore:mengyastore@tcp(192.168.1.100:3306)/mengyastore?charset=utf8mb4&parseTime=True&loc=Local"
|
||
)
|
||
|
||
func Load(path string) (*Config, error) {
|
||
var cfg Config
|
||
data, err := os.ReadFile(path)
|
||
if err == nil {
|
||
if jsonErr := json.Unmarshal(data, &cfg); jsonErr != nil {
|
||
return nil, fmt.Errorf("解析配置文件 %s 失败: %w", path, jsonErr)
|
||
}
|
||
}
|
||
// 文件不存在时使用默认值,环境变量在下方仍优先生效。
|
||
|
||
if cfg.AdminToken == "" {
|
||
cfg.AdminToken = "changeme"
|
||
}
|
||
// DATABASE_DSN 环境变量优先于配置文件。
|
||
if dsn := os.Getenv("DATABASE_DSN"); dsn != "" {
|
||
cfg.DatabaseDSN = dsn
|
||
}
|
||
if cfg.DatabaseDSN == "" {
|
||
cfg.DatabaseDSN = TestDSN
|
||
}
|
||
return &cfg, nil
|
||
}
|