增加二进制文件包含必要资源文件功能
This commit is contained in:
66
embed.go
Normal file
66
embed.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"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 {
|
||||
fmt.Printf("文件已存在: %s,跳过写入\n", targetPath)
|
||||
return nil
|
||||
}
|
||||
|
||||
err = os.WriteFile(targetPath, data, 0644)
|
||||
if err != nil {
|
||||
return fmt.Errorf("写入文件失败: %w", err)
|
||||
}
|
||||
|
||||
fmt.Printf("释放: %s → %s\n", path, targetPath)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func embed_ip2region() {
|
||||
fmt.Println("正在释放 ip2region 数据...")
|
||||
|
||||
err := releaseEmbeddedDir(embeddedFS, "ip2region", "ip2region")
|
||||
if err != nil {
|
||||
fmt.Println("释放失败:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("释放完成,程序继续执行...")
|
||||
|
||||
// 你可以在这里使用 ip2region.xdb 文件了,例如:
|
||||
if _, err := os.Stat("ip2region/ip2region.xdb"); err == nil {
|
||||
fmt.Println("✅ 确认 ip2region.xdb 已成功写出")
|
||||
// 这里可以调用 ip2region 逻辑加载它
|
||||
} else {
|
||||
fmt.Println("❌ 找不到 ip2region.xdb")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user