如何分包

良好的分包让代码更加清晰,本节主要讲述在不同场景下分包的方法,关于包命名请参考包命名

一、去除无意义包

golang中禁止使用类似util的无意义包名,有时开发者会将专门使用api来给提供用户使用的包命名,看似加速了代码的定位,但随着包体积的增长,将越来越难以维护包之间的依赖关系。

1.1 案例分析

考虑这样的util包结构:

utils/
├── concurrency.go
├── file.go
├── file_test.go
├── rander.go
├── rand.go
├── rand_test.go
├── string.go
├── testdata
│   ├── existdir
│   │   └── existfile
│   ├── files
│   │   ├── xxx.toml
│   │   └── xxx.txt
│   └── so
│       └── CVE_2017_0427.so
├── utils.go
└── utils_test.go

该包从命名到组织有如下错误:

  1. 使用复数utils作为包名;

  2. 使用含义不清的utils作为包名。

1.2 解决方法

将该包的内容进行分离,例如file.go中的函数有:

func IsExist(path string) bool
func CreatePath(filePath string) error
func RemovePath(filePath string) error
func GetAllFiles(dirPth string, suffix string) (files []string, err error)
func ReadFile(path string) ([]byte, error)
func WriteFile(filePath string, content string) error

该文件前四个函数是对文件系统的操作,而后两个函数则是文件I/O操作,在进行分包时应为文件系统创建fsfilesystem包,为文件I/O操作创建fileio包,并将函数分别移入。修改后的文件结构应为:

fs/
├── fs.go
└── fs_test.go
fileio/
├── fileio.go
└── fileio_test.go

对于utils中其他组件同样按照功能进行分包。

Last updated

Was this helpful?