You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

os.MkdirAll创建多级嵌套目录失败是否为Go标准库BUG?

问题根因说明

这不是Go标准库os.MkdirAll的BUG,问题出在你传入的权限参数不符合目录的运行要求:

  • 类Unix系统中,目录和普通文件的权限逻辑完全不同:要在某一目录下创建子项(子目录/文件),操作用户对该目录必须具备执行权限(x权限位),否则无法遍历进入目录完成写入操作。
  • 你传入的权限参数是0644,对应权限为rw-r--r--,完全没有开放执行权限:
    1. 创建单层目录output/2021-11-12.19.51.50.047614时,仅需要创建这一级目录,不需要在刚创建的目录下写入内容,所以操作可以成功。
    2. 创建多级嵌套目录时,os.MkdirAll会先创建父级目录output/2021-11-12.19.51.50.047614,并将其权限设为你指定的0644,接下来要在该父目录下创建2011-12子目录时,因为父目录没有执行权限,系统会拒绝写入操作,最终导致整个调用失败。
修复方法

将权限参数替换为符合目录要求的权限值即可,常用的目录权限为0755(对应rwxr-xr-x,所有者可读可写可执行,其他用户可读可执行),修改后的调用代码如下:

os.MkdirAll(prefix, 0755)

如果需要更严格的目录权限,至少要保证所有者的执行位开启,比如0700也可以正常完成多级目录创建。


内容的提问来源于stack exchange,提问作者Dean Schulze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:00