在golang中,函數划分為全局函數和成員函數,在使用的時候,有種情況,會產生一些疑惑的,就是在寫業務代碼的時候,使用全局函數好像會比較方便,一般業務代碼,都不會復用,都是針對特定的業務進行編程,要復用的代碼都會封裝為功能函數了。在寫業務代碼的時候,使用包+全局函數的划分方式,可以將業務代碼寫成單例,把receive也省略掉了,簡單清晰。
使用包+全局函數的方式來划分模塊,很多項目在寫業務代碼的時候,都是這樣操作的,但這樣會增加目錄的層次,看起來會比較啰嗦。
因為使用包划分代碼,業務代碼使用的變量都成為了包內函數,這樣在多個包內文件會互相污染,而多個業務中,可能會用到相同的變量,這樣要么通過命名來避免,要么通過將包划分更細進行避免,通過命名來解決,實在太過於啰嗦,不考慮。
拆分后,很可能的代碼結構:
src
├── user
│ ├── user.go
├── auth
│───├── auth.go
這樣很明顯,拆分出來的目錄太多了,幾乎每一個業務一個,也是比較啰嗦的,但也還算比較清晰,但還是不夠好。
為了使代碼更加清晰簡潔,我覺得業務代碼應該使用成員函數來實現,代碼的結構應該是下面這樣:
src
├── user.go
├── auth.go
這樣層次簡單,查看代碼的時候也沒那么啰嗦,而且也遵從了一種原則:要維護狀態的函數,都寫成成員函數,反之則可以是全局函數