go语言递归扫描指定目录下文件

Python023

go语言递归扫描指定目录下文件,第1张

使用go语言递归查找指定目录下的文件,根据正则匹配筛选出需要的文件,并且忽略指定的目录

先使用 ioutil.ReadDir 遍历出指定目录下的文件,再递归进目录中遍历,问题的关键在于识别出文件为目录, fs.FileInfo 中有一个 IsDir() 函数可以识别是否是目录

正则匹配使用 regexp.MatchString ,regexp中有很多正则操作的工具,如根据正则替换字符串中的指定字符

golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:

如果返回的错误为nil,说明文件或文件夹存在

如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在

如果返回的错误为其它类型,则不确定是否在存在

func PathExists(path string) (bool, error) {

_, err := os.Stat(path)

if err == nil {

return true, nil

}

if os.IsNotExist(err) {

return false, nil

}

return false, err

}

先看一下目录结构,注意这里的src名称是必须的,go在设置了GOPATH后,默认会添加src去寻找package,暂未查询是否有方法不按照src查询

根据上面的描述,Go语言中通过包中函数的名称来区分公共函数和私有函数,我们在main函数中是无法调用myPrivateFunc的

此时如果执行通过go run方式执行,会看到如下的提示信息,这与大部分语言对于包管理方式相关,所以我们通过两种不同的方法来让代码执行起来

返回如下,这里面对我们后续执行有影响的两个参数GO111MODULE和GOPATH

如果要使用gopath模式引用包,则需要关闭mod模式

设置GOPATH为当前路径,即main.go所在的路径

此时再查看go env时,GOPATH已经发生改变

我们再次尝试执行代码

可以看到public函数被调用