package config import ( "os" "strings" ) // depth 是 .env 文件的搜索深度 var depth = 8 type defaultConfig struct { Redis struct { Addr string Pass string } DB struct { DSN string DSN2 string Driver string } ListenAddr struct { GRPC string HTTP string } JWKS struct { Url string } DebugMode struct { Enable bool } } var Config = defaultConfig{} func GetEnv(key string, defaultValue ...string) string { r := os.Getenv(key) if len(r) == 0 && len(defaultValue) > 0 { return defaultValue[0] } else { return r } } func GetEnvFilePath() string { var path string if os.Getenv("ENV_PATH") != "" { path = os.Getenv("ENV_PATH") return path } var pathOptions []string for i := 0; i <= depth; i++ { pathOptions = append(pathOptions, strings.Repeat("../", i)+".env") } for _, p := range pathOptions { if _, err := os.Stat(p); err == nil { path = p break } } return path }