首页 > 后端开发 > Golang > 正文

Golang组合模式实现文件系统结构管理

P粉602998670
发布: 2025-09-09 11:51:01
原创
962人浏览过
组合模式通过统一接口处理文件和目录,实现递归遍历与大小统计,Go中用FileSystemNode接口统一文件和目录操作,Directory包含多个节点并递归调用,简化树形结构管理。

golang组合模式实现文件系统结构管理

在 Go 语言中,组合模式非常适合用来表示树形结构,比如文件系统中的目录和文件关系。通过统一接口处理文件和目录,可以简化操作逻辑,实现递归遍历、统计大小、打印结构等功能。

定义组件接口

我们需要一个统一的接口来表示文件系统中的节点,无论是文件还是目录,都实现相同的方法。

Component 接口定义了所有节点共有的行为,比如获取名称、获取大小、打印路径等。

代码如下:

package main

type FileSystemNode interface {
    GetName() string
    GetSize() int
    Print(indent string)
}
登录后复制

实现文件节点

文件是最小单位,它不包含其他节点,只保存名称和大小。

立即学习go语言免费学习笔记(深入)”;

File 结构体实现 FileSystemNode 接口:

type File struct {
    name string
    size int
}

func (f *File) GetName() string {
    return f.name
}

func (f *File) GetSize() int {
    return f.size
}

func (f *File) Print(indent string) {
    println(indent + f.name + " (file, size: " + string(rune(f.size)) + ")")
}
登录后复制
注意:上面 Print 中的 size 转字符串方式有误,应使用 strconv.Itoa。

修正后的 Print 方法:

86CMS企业网站系统中英繁三语版1.2
86CMS企业网站系统中英繁三语版1.2

86CMS企业网站系统为智能ASP网站管理程序,适合中小企业自建网站、二次开发使用。本程序具有体积小巧、程序文件结构严谨、界面清爽简单、功能强大、非专业人士使用入门快、中小企业使用投资小等实用特点。本版本为中英繁版本。86CMS企业网站系统中英繁三语版 v1.2 更新1.修正英文版的flash幻灯调用出错问题。2.修正英文版导航菜单设置出错问题。3.增加信息是否显示在中英各版的功能。4.调整首页视

86CMS企业网站系统中英繁三语版1.2 1
查看详情 86CMS企业网站系统中英繁三语版1.2
import "fmt"

func (f *File) Print(indent string) {
    fmt.Println(indent + f.name + " (file, size: " + fmt.Sprintf("%d", f.size) + ")")
}
登录后复制

实现目录节点(组合容器)

Directory 可以包含多个 FileSystemNode,包括文件和其他目录,体现“组合”特性。

type Directory struct {
    name   string
    nodes  []FileSystemNode
}

func (d *Directory) GetName() string {
    return d.name
}

func (d *Directory) GetSize() int {
    var total int
    for _, node := range d.nodes {
        total += node.GetSize()
    }
    return total
}

func (d *Directory) Add(node FileSystemNode) {
    d.nodes = append(d.nodes, node)
}

func (d *Directory) Print(indent string) {
    fmt.Println(indent + d.name + " (dir, size: " + fmt.Sprintf("%d", d.GetSize()) + ")")
    for _, node := range d.nodes {
        node.Print(indent + "  ")
    }
}
登录后复制

使用示例:构建文件系统结构

现在我们可以创建一个模拟的文件系统,包含目录和子目录。

func main() {
    root := &Directory{name: "root"}

    docs := &Directory{name: "docs"}
    img := &Directory{name: "images"}

    file1 := &File{name: "readme.txt", size: 1024}
    file2 := &File{name: "photo.jpg", size: 2048}
    file3 := &File{name: "avatar.png", size: 512}

    docs.Add(file1)
    img.Add(file2)
    img.Add(file3)

    root.Add(docs)
    root.Add(img)

    // 打印整个结构
    root.Print("")

    // 输出总大小
    fmt.Printf("Total size: %d bytes\n", root.GetSize())
}
登录后复制

输出结果类似:

root (dir, size: 3584)
  docs (dir, size: 1024)
    readme.txt (file, size: 1024)
  images (dir, size: 2560)
    photo.jpg (file, size: 2048)
    avatar.png (file, size: 512)
Total size: 3584 bytes
登录后复制

组合模式让客户端代码无需区分文件和目录,统一调用接口即可完成操作,结构清晰,扩展性强。

基本上就这些,核心是接口统一和递归处理。添加删除节点也很方便,适合构建树形管理结构。

以上就是Golang组合模式实现文件系统结构管理的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号