From d967e74125c1ace8e82dc82c3fc5b0251074da29 Mon Sep 17 00:00:00 2001 From: wonder Date: Mon, 20 Apr 2026 15:54:40 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=A7=A3=E5=86=B3=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=AD=A3=E7=A1=AE=E5=8A=A0=E8=BD=BD=20.env=20?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/config/config.go | 29 +++++++++++++++++++++----- backend/internal/config/config_test.go | 23 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 backend/internal/config/config_test.go diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 4df148f..738e2ff 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -3,6 +3,8 @@ package config import ( "fmt" "os" + "path/filepath" + "runtime" "time" "github.com/gin-contrib/cors" @@ -48,13 +50,30 @@ type Config struct { } func Load() (*Config, error) { - var err error - err = godotenv.Load("../configs/.env") - err = godotenv.Load("./configs/.env") - if err != nil { - return nil, fmt.Errorf("error loading .env file: %w", err) + // 查找go.mod所在的模块根目录 + _, filename, _, ok := runtime.Caller(0) + if !ok { + return nil, fmt.Errorf("unable to get caller info") } + dir := filepath.Dir(filename) + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + // 找到模块根目录,加载configs/.env + envPath := filepath.Join(dir, "configs", ".env") + if err = godotenv.Load(envPath); err == nil { + break + } + } + parent := filepath.Dir(dir) + if parent == dir { + break + } + dir = parent + } + + // 如果找不到.env,继续使用环境变量 + cfg := &Config{ Server: ServerConfig{ Port: getEnv("PORT", "3001"), diff --git a/backend/internal/config/config_test.go b/backend/internal/config/config_test.go new file mode 100644 index 0000000..6ff1c49 --- /dev/null +++ b/backend/internal/config/config_test.go @@ -0,0 +1,23 @@ +package config + +import ( + "testing" +) + +func TestLoad(t *testing.T) { + cfg, err := Load() + if err != nil { + t.Fatalf("Load() failed: %v", err) + } + + if cfg.Server.Port == "" { + t.Error("Expected Server.Port to have default value") + } + + if cfg.LLM.Provider == "" && cfg.LLM.APIKey == "" { + t.Logf("Config loaded - some optional values may be empty (expected if .env not found)") + } else { + t.Logf("Config loaded successfully. Provider: %s, Model: %s", + cfg.LLM.Provider, cfg.LLM.Model) + } +}