应直接使用os.TempDir()获取系统临时目录路径,它跨平台封装了TMPDIR/TEMP/USERPROFILE等环境变量逻辑并fallback到默认路径,返回规范绝对路径;但该函数不创建目录、不校验权限,需配合os.MkdirTemp等函数安全使用。

Go 里怎么拿到系统临时目录路径
直接用 os.TempDir(),它返回当前操作系统公认的临时目录路径,比如 Linux 是 /tmp,Windows 是 C:\Users\XXX\AppData\Local\Temp,macOS 是 /var/folders/xxx/xxx/T/。这个函数不依赖环境变量是否设置,底层会按 OS 规范 fallback 到默认位置。
为什么有时候 os.TempDir() 返回空或报错
极少数情况下会返回空字符串或 panic(比如系统策略禁止访问临时目录、权限被锁死),但更常见的是你误用了它——它只返回路径,不创建目录。如果后续代码直接往这个路径写文件却没做 os.MkdirAll(),就会遇到 no such file or directory 错误。
- 它不保证目录存在,只保证“该路径是系统认定的临时目录位置”
- 它不检查读写权限,也不做任何 mkdir 操作
- 如果你设置了
TMP、TMPDIR或TEMP环境变量,os.TempDir()会优先用它们;没设才 fallback 到系统默认值
需要自定义临时目录时怎么做
别改 os.TempDir() 的行为,而是用 io.TempDir() 或 os.MkdirTemp() 创建专属子目录。前者用于手动指定父目录,后者自动在系统临时目录下建随机名目录并返回完整路径。
在 Golang 中使用 samber/hot 进行内存缓存,支持 LRU、LFU、TinyLFU、W‑TinyLFU、S3FIFO、ARC、TwoQueue、SIEVE、FIFO 等淘汰算法,提供 TTL、缓存加载器及分片功能。
-
os.MkdirTemp(os.TempDir(), "myapp-*"):安全、带随机后缀、自动创建、返回绝对路径 -
os.MkdirTemp("", "myapp-*"):等价于os.MkdirTemp(os.TempDir(), ...) - 避免硬编码路径如
/tmp/myapp,跨平台不兼容,且可能被其他进程干扰
临时文件写完要不要手动清理
不清理是常态,但得看场景。系统一般不会自动删,os.Remove() 或 os.RemoveAll() 得你自己调。不过要注意:
立即学习“go语言免费学习笔记(深入)”;
- 程序崩溃时清理逻辑可能不执行,建议配合
defer+os.RemoveAll()在函数退出时删 - 若文件需长期保留(比如缓存),就别放
os.TempDir()下,应另选数据目录 - 多个 goroutine 同时调
os.MkdirTemp()是线程安全的,不用额外加锁

















