文件系统抽象
在 dubbo-kubernetes 中,利用 golang 提供的 fs 抽象接口,实现了多种不同文件系统。各种文件系统的实现在 app/dubboctl/internal/filesystem
文件夹下,首先定义了一个 Filesystem 接口:
1 | type Filesystem interface { |
Filesystem 接口将访问 template 文件(至于什么是模版,可以不知道)的各种实现差异,封装到这个接口中。Filesystem 接口的实现包括以下:
- zipFS:用于对 zip 压缩文件的读写,将 zip 压缩文件作为一个文件系统,压缩文件中的一个个被压缩的文件或者文件夹就是文件系统中的文件。
- billyFS:表示 git repo 中的文件系统,用于访问在远程 git 仓库中的 template。
- osFilesystem:由操作系统支持的文件系统,用于访问 template。
- subFS:表示 Filesystem 中的子目录,单独作为一个文件系统。
- maskingFS:基于 Filesystem,用于屏蔽某些文件的文件系统。
Golang 提供了 io.Reader 和 io.Writer 接口,抽象出对文件、字节流、socket 的读写。至于问什么提出这样的接口,将对象看作是文件一样读写,可以在 Linux 中找到启发:Linux 中,一切皆是文件。
在 1.6 中提供了 fs.FS 抽象文件系统抽象,既然很多对象可以被看作是对象,那么这些抽象的文件聚集起来,就可以抽象出文件系统。