//go:build dev package main import ( "encoding/base64" "html/template" "os" "path/filepath" "strings" ) var tmpl *template.Template func init() { // 开发模式下从当前目录读取 UI 文件 uiDir := "ui" // 如果当前目录没有 ui,尝试从可执行文件目录查找 if _, err := os.Stat(uiDir); os.IsNotExist(err) { execPath, err := os.Executable() if err != nil { panic(err) } uiDir = filepath.Join(filepath.Dir(execPath), "ui") } // 读取 UI 文件 styleCSS, err := os.ReadFile(filepath.Join(uiDir, "style.css")) if err != nil { panic(err) } scriptJS, err := os.ReadFile(filepath.Join(uiDir, "script.js")) if err != nil { panic(err) } faviconSVG, err := os.ReadFile(filepath.Join(uiDir, "favicon.svg")) if err != nil { panic(err) } uiTmpl, err := os.ReadFile(filepath.Join(uiDir, "ui.html")) if err != nil { panic(err) } // 组装模板 t := strings.Replace(string(uiTmpl), "css_will_be_here", string(styleCSS), 1) t = strings.Replace(t, "js_will_be_here", string(scriptJS), 1) t = strings.Replace(t, "favicon_will_be_here", base64.StdEncoding.EncodeToString(faviconSVG), 2) var parseErr error tmpl, parseErr = template.New("").Parse(t) if parseErr != nil { panic(parseErr) } }