Files
nl-game-api/internal/config/config.go
2026-08-14 13:17:03 +08:00

60 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package config 负责加载并全局提供 config.yaml 中的配置
package config
import (
"fmt"
"os"
"gopkg.in/yaml.v3"
)
// LLMConf 单个大模型提供方的连接配置
type LLMConf struct {
APIKey string `yaml:"api_key"` // API 密钥(为空则该模型不可用,走规则 AI 兜底)
BaseURL string `yaml:"base_url"` // OpenAI 兼容接口的基础地址
Model string `yaml:"model"` // 模型名称(如 lite / deepseek-chat
}
// Config 后端全部配置的根结构
type Config struct {
Server struct {
Port int `yaml:"port"` // HTTP 服务监听端口
} `yaml:"server"`
MySQL struct {
Host string `yaml:"host"` // 数据库主机
Port int `yaml:"port"` // 数据库端口
User string `yaml:"user"` // 数据库账号
Password string `yaml:"password"` // 数据库密码
Database string `yaml:"database"` // 库名
} `yaml:"mysql"`
JWT struct {
Secret string `yaml:"secret"` // JWT 签名密钥
ExpireHours int `yaml:"expire_hours"` // Token 有效期(小时)
} `yaml:"jwt"`
AI struct {
Spark LLMConf `yaml:"spark"` // 讯飞星火 Lite 配置
DeepSeek LLMConf `yaml:"deepseek"` // DeepSeek 配置
} `yaml:"ai"`
}
// C 全局配置实例Load 成功后可直接读取)
var C Config
// Load 从指定路径读取 YAML 配置并解析到全局变量 C
func Load(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("读取配置文件失败: %w", err)
}
if err := yaml.Unmarshal(data, &C); err != nil {
return fmt.Errorf("解析配置文件失败: %w", err)
}
return nil
}
// DSN 拼接 GORM 使用的 MySQL 连接串
func (c *Config) DSN() string {
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=false&loc=Local",
c.MySQL.User, c.MySQL.Password, c.MySQL.Host, c.MySQL.Port, c.MySQL.Database)
}