在 go 中,使用 `os.mkdirall(path, perm)` 可以简洁、安全、跨平台地递归创建嵌套目录,若路径已存在则静默成功,完全符合 `-p` 语义。
Go 标准库提供了高度惯用且健壮的解决方案:os.MkdirAll。它正是为满足“递归创建 + 存在即忽略”这一常见需求而设计,语义上等价于 Bash 的 mkdir -p、C# 的 Directory.CreateDirectory、PHP 的 mkdir(..., ..., true) 或 Java 的 File.mkdirs()。
package main
import (
"fmt"
"os"
)
func main() {
path := "some/deep/nested/path"
err := os.MkdirAll(path, 0755) // Unix 权限;Windows 仅保留读/写位
if err != nil {
fmt.Printf("创建目录失败: %v\n", err)
return
}
fmt.Println("目录(含父级)创建成功或已存在")
}✅ 关键特性说明:
十进制误写;若需最大兼容性,可结合 os.FileMode(0755)。无需封装、无需第三方依赖——os.MkdirAll 就是 Go 生态中创建嵌套目录的标准、惯用、推荐方式。它简洁、明确、跨平台,且与开发者在其他语言中的直觉完全对齐。记住:只要需要 mkdir -p 的能力,就用 os.MkdirAll。