// Package paths 资源路径解析:全部相对路径基于「可执行文件所在目录」解析, // 保证双击运行 / 桌面快捷方式 / 安装目录下任意 CWD 都能找到资源(修复闪退根因)。 package paths import ( "os" "path/filepath" "sync" ) var ( once sync.Once baseDir string ) // BaseDir 可执行文件所在目录(缓存;失败回退 CWD)。 func BaseDir() string { once.Do(func() { exe, err := os.Executable() if err != nil { baseDir, _ = os.Getwd() return } baseDir = filepath.Dir(exe) }) return baseDir } // Join 基于可执行文件目录拼接相对路径。 func Join(rel ...string) string { parts := append([]string{BaseDir()}, rel...) return filepath.Join(parts...) } // RootDir 项目根目录:可执行文件所在目录;若其位于 <根>/bin/(开发构建布局) // 则取父目录——截图等「非打包产物」统一存根目录(如 jietu/)。 func RootDir() string { base := BaseDir() if filepath.Base(base) == "bin" { return filepath.Dir(base) } return base }