Files
xk-hy-transit-go/internal/config/envfile.go
2026-05-22 08:06:07 +08:00

82 lines
1.9 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
import (
"log"
"os"
"path/filepath"
"strings"
"github.com/joho/godotenv"
)
// LoadEnvFiles 从多个候选路径加载 .env不覆盖已存在的 OS 环境变量)。
// 查找顺序CWD → programDir → programDir/.. 。
func LoadEnvFiles() {
candidates := envFileCandidates()
loaded := false
for _, p := range candidates {
if _, err := os.Stat(p); err != nil {
continue
}
if err := godotenv.Load(p); err != nil {
log.Printf("config: 加载 %s 失败: %v", p, err)
continue
}
log.Printf("config: 已加载 %s", p)
loaded = true
}
if !loaded {
log.Print("config: 未找到 .env请复制 .env.example 为 .env 并填写 XK_API_TOKEN、HY_*")
}
}
// WarnIfRequiredEnvMissing 在关键变量仍为空时提示检查 .env 路径与语法。
func WarnIfRequiredEnvMissing() {
var missing []string
for _, key := range []string{"XK_API_TOKEN", "HY_APP_KEY", "HY_APP_SECRET", "HY_AES_KEY"} {
if strings.TrimSpace(os.Getenv(key)) == "" {
missing = append(missing, key)
}
}
if len(missing) > 0 {
log.Printf("config: 以下变量仍为空: %s请检查 .env 是否在项目根且语法正确,含引号)", strings.Join(missing, ", "))
}
}
func envFileCandidates() []string {
seen := make(map[string]struct{})
var out []string
add := func(p string) {
p = filepath.Clean(p)
if _, ok := seen[p]; ok {
return
}
seen[p] = struct{}{}
out = append(out, p)
}
if wd, err := os.Getwd(); err == nil && wd != "" {
add(filepath.Join(wd, ".env"))
}
base := programDir()
add(filepath.Join(base, ".env"))
add(filepath.Join(base, "..", ".env"))
return out
}
func programDir() string {
if exe, err := os.Executable(); err == nil {
dir := filepath.Dir(exe)
if strings.Contains(dir, "go-build") {
if wd, err := os.Getwd(); err == nil && wd != "" {
return wd
}
}
return dir
}
if wd, err := os.Getwd(); err == nil && wd != "" {
return wd
}
return "."
}