登录
首页 >  Golang >  Go问答

如何获取目录总大小?

来源:Golang技术栈

时间:2023-04-18 14:11:58 124浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何获取目录总大小?》,以下内容主要包含golang等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

所以我正在尝试使用 Go 获取目录的总大小。到目前为止,我有这个:

var dirSize int64 = 0

func readSize(path string, file os.FileInfo, err error) error {
    if !file.IsDir() {
        dirSize += file.Size()
    }
    return nil
} 

func DirSizeMB(path string) float64 {
    dirSize = 0
    filepath.Walk(path, readSize)
    sizeMB := float64(dirSize) / 1024.0 / 1024.0
    sizeMB = Round(sizeMB, .5, 2)
    return sizeMB
}

问题是dirSize全局变量是否会导致问题,如果确实如此,我如何将其移动到DirSizeMB函数的范围内?

正确答案

使用这样的全局变量充其量是不好的做法。如果DirSizeMB同时调用,这也是一场比赛。

简单的解决方案是使用闭包,例如:

func DirSize(path string) (int64, error) {
    var size int64
    err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.IsDir() {
            size += info.Size()
        }
        return err
    })
    return size, err
}

Playground

如果您认为看起来更好,可以将闭包分配给变量。

今天关于《如何获取目录总大小?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表