Files

60 lines
1.8 KiB
Go
Raw Permalink Normal View History

2026-08-14 13:17:03 +08:00
// 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)
}