如何分包
良好的分包让代码更加清晰,本节主要讲述在不同场景下分包的方法,关于包命名请参考包命名。
一、去除无意义包
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
该包从命名到组织有如下错误:
使用复数
utils
作为包名;使用含义不清的
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操作,在进行分包时应为文件系统创建fs
或filesystem
包,为文件I/O操作创建fileio
包,并将函数分别移入。修改后的文件结构应为:
fs/
├── fs.go
└── fs_test.go
fileio/
├── fileio.go
└── fileio_test.go
对于utils中其他组件同样按照功能进行分包。
Last updated
Was this helpful?