Files
DenyIP-go/embed.go
2025-08-21 14:51:48 +08:00

68 lines
1.5 KiB
Go

package main
import (
"embed"
"fmt"
"io/fs"
"log"
"os"
"path/filepath"
)
//go:embed ip2region/*
var embeddedFS embed.FS
func releaseEmbeddedDir(efs embed.FS, embedPath string, targetDir string) error {
return fs.WalkDir(efs, embedPath, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
relPath, _ := filepath.Rel(embedPath, path)
targetPath := filepath.Join(targetDir, relPath)
if d.IsDir() {
return os.MkdirAll(targetPath, 0755)
}
data, err := efs.ReadFile(path)
if err != nil {
return fmt.Errorf("读取嵌入文件失败: %w", err)
}
// 如果文件已存在就跳过(可选)
if _, err := os.Stat(targetPath); err == nil {
log.Printf(" 文件已存在: %s, 跳过写入\n", targetPath)
return nil
}
err = os.WriteFile(targetPath, data, 0644)
if err != nil {
return fmt.Errorf("写入文件失败: %w", err)
}
log.Printf(" 释放: %s → %s\n", path, targetPath)
return nil
})
}
func embed_ip2region() {
log.Println(" 正在释放 ip2region 数据...")
err := releaseEmbeddedDir(embeddedFS, "ip2region", "ip2region")
if err != nil {
log.Println(" 释放失败:", err)
os.Exit(1)
}
log.Println(" 释放完成,程序继续执行...")
// 你可以在这里使用 ip2region.xdb 文件了,例如:
if _, err := os.Stat("ip2region/ip2region.xdb"); err == nil {
log.Println(" ✅ 确认 ip2region.xdb 已成功写出")
// 这里可以调用 ip2region 逻辑加载它
} else {
log.Println(" ❌ 找不到 ip2region.xdb")
}
}