英文:
What's the most idiomatic way to create directories recursivelly in Go?
问题
我需要使用Go创建给定的嵌套目录结构,但是我无法找到最实用和惯用的方法来实现这一点。以下是一些灵感:
Bash:mkdir -p some/deep/path
C#:IO.Directory.CreateDirectory(@"some/deep/path")
PHP:mkdir("some/deep/path", 0777, true)
Java:new File("some/deep/path").mkdirs()
Go:?
要求是如果路径已经存在,则操作应该保持静默(就像其他语言示例中一样)。
英文:
I need to create a given nested directory structure using Go, but I couldn't figure out the most practical and idiomatic way to do that. Some inspiration:
Bash: mkdir -p some/deep/path
C# : IO.Directory.CreateDirectory(@"some/deep/path")
PHP : mkdir("some/deep/path", 0777, true)
Java: new File("some/deep/path").mkdirs()
Go : ?
Requirement is that operation should be silent if path is already in place (just like in the other language examples).
答案1
得分: 3
你可以尝试使用os.MkdirAll
来创建你所需的所有文件夹。
> MkdirAll
会创建一个名为path的目录,连同所有必要的父目录,并返回nil
,否则返回一个错误。
权限位perm将用于MkdirAll
创建的所有目录。
如果path已经是一个目录,MkdirAll
不会执行任何操作并返回nil
。
可以查看它的test类。
请注意,当你查看它的实现时,MkdirAll
并不完全是“原子”的。
英文:
You can try and see if os.MkdirAll
does create all the folder that you need.
> MkdirAll
creates a directory named path, along with any necessary parents, and returns nil
, or else returns an error.
The permission bits perm are used for all directories that MkdirAll
creates.
If path is already a directory, MkdirAll
does nothing and returns nil
.
See its test class.
Note that, when you look at its implementation, MkdirAll
isn't exactly "atomic".
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论