Go+ 目录教程(4.18)

举报
liuzhen007 发表于 2022/02/25 23:50:44 2022/02/25
【摘要】 ​目录Go+ 概述正文导入包os.Mkdiros.MkdirAllos.RemoveAllos.ReadDiros.Chdirfilepath.WalkGo+ 概述Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。正文...

目录


Go+ 概述

正文

导入包

os.Mkdir

os.MkdirAll

os.RemoveAll

os.ReadDir

os.Chdir

filepath.Walk


Go+ 概述

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

正文

Go+ 提供很多处理目录的方法,今天我们就来了解一下这方面的一些内容。

导入包

Go+ 在操作目录时,一般会使用的工具库是 os 和 path/filepath 包,导入方式如下:

import (
    "os"
    "path/filepath"
)

os.Mkdir

os.Mkdir 方法可以用来创建子目录,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    } 
    println("执行成功")

}

err := os.Mkdir("subdir", 0755)
check(err)

执行结果:

执行成功

亲自试一试!

但是,os.Mkdir 只能创建当前目录的子目录,不能直接创建子目录的子目录,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
}

err := os.Mkdir("subdir1/subdir2", 0755)
check(err)

执行结果:

panic: mkdir subdir1/subdir2: no such file or directory

goroutine 1 [running]:
main.check(...)
	/tmp/sandbox849975208/main.gop:7
main.main()
	/tmp/sandbox849975208/main.gop:12 +0x77

亲自试一试!

那我们是不是只能一级一级创建子目录呢?不是的,我们可以看下面的方法。

os.MkdirAll

os.MkdirAll 方法可以创建多级子目录,当然也支持创建当前目录的子目录,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
    println("执行成功")
}

err := os.MkdirAll("subdir", 0755)
check(err)

err = os.MkdirAll("subdir1/subdir2", 0755)
check(err)

执行结果:

执行成功
执行成功

亲自试一试! 

os.RemoveAll

os.RemoveAll 方法用来删除目录,如果删除的目录包含子目录,也会一起删除,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
    println("执行成功")
}

err := os.MkdirAll("subdir", 0755)
check(err)

err = os.MkdirAll("subdir1/subdir2", 0755)
check(err)

err = os.RemoveAll("subdir")
check(err)

err = os.RemoveAll("subdir1/subdir2")
check(err)

执行结果:

执行成功
执行成功
执行成功
执行成功

亲自试一试!

os.ReadDir

os.ReadDir 方法用来查看目录下的内容,返回值是 os.DirEntry 类型的对象切片,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
    println("执行成功")
}

createEmptyFile := func(name string) {
    d := []byte("")
    check(os.WriteFile(name, d, 0644))
}

err := os.MkdirAll("subdir/parent/child", 0755)
check(err)

createEmptyFile("subdir/parent/file2")
createEmptyFile("subdir/parent/file3")
createEmptyFile("subdir/parent/child/file4")

c, err := os.ReadDir("subdir/parent")
check(err)
println("Listing subdir/parent")
for _, entry := range c {
    println(" ", entry.Name(), entry.IsDir())
}

执行结果:

执行成功
执行成功
执行成功
执行成功
执行成功
Listing subdir/parent
  child true
  file2 false
  file3 false

亲自试一试! 

os.Chdir

os.Chdir 方法可以用来修改当前的工作目录,类似于 cd 命令,示例代码如下:

import (
    "os"
)

func check(e error) {
    if e != nil {
        panic(e)
    }
    println("执行成功")
}

createEmptyFile := func(name string) {
    d := []byte("")
    check(os.WriteFile(name, d, 0644))
}

err := os.MkdirAll("subdir/parent/child", 0755)
check(err)

createEmptyFile("subdir/parent/file2")
createEmptyFile("subdir/parent/file3")
createEmptyFile("subdir/parent/child/file4")

err = os.Chdir("subdir/parent/child")
check(err)

c, err := os.ReadDir(".")
check(err)
println("Listing subdir/parent/child")
for _, entry := range c {
    println(" ", entry.Name(), entry.IsDir())
}

执行结果:

执行成功
执行成功
执行成功
执行成功
执行成功
执行成功
Listing subdir/parent/child
  file4 false

亲自试一试!

filepath.Walk

filepath.Walk 方法可以递归地访问一个目录,包括它的所有子目录。Walk 接受回调函数来处理访问的每个文件或目录。示例代码如下:

import (
    "os"
    "path/filepath"
)

func visit(p string, info os.FileInfo, err error) error {
    if err != nil {
        return err
    }
    println(" ", p, info.IsDir())
    return nil
}

createEmptyFile := func(name string) {
    d := []byte("")
    os.WriteFile(name, d, 0644)
}

err := os.MkdirAll("subdir/parent/child", 0755)
if err != nil {
    panic(err)
}

createEmptyFile("subdir/parent/file2")
createEmptyFile("subdir/parent/file3")
createEmptyFile("subdir/parent/child/file4")

println("遍历 subdir 目录:")
err = filepath.Walk("subdir", visit)

执行结果:

遍历 subdir 目录:
  subdir true
  subdir/parent true
  subdir/parent/child true
  subdir/parent/child/file4 false
  subdir/parent/file2 false
  subdir/parent/file3 false

亲自试一试!


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。