Golang快速開發框架——項目立項與系統配置讀取組件viper(一)
背景
知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進行共同學習。歡迎大家進行持續關注。
知識分享系列目前包含Java、Golang、Linux、Docker等等。
開發環境
內容
日常我們使用golang開發項目時經常需要使用一些基礎組件,每次新建較為繁瑣,現有市面上的感覺不太適合自己,因此決定自己搭建一套,同時開源出來分享給大家使用,歡迎大家提出各種需求。下面我們開始搭建這個框架。
1、整體目錄劃分
- conf ------------------ 配置文件
- deploy ------------------ 部署相關
- doc --------------------- 框架相關文檔
- main ------------------- 初始入口
- router ------------------ 業務路由
- src ---------------------- 業務代碼
- base ------------------ 框架基礎模塊
- config -------------------- 配置文件管理部分
- constant ------------------ 常量包
- begin ---------------------- 框架初始啟動部分
- util ---------------------- 基礎工具類部分
- base ------------------ 框架基礎模塊
- go.mod ---------------- 模塊管理配置文件
2、開始整合自定義配置文件讀取組件
2.1、分析對比
日常我們讀取配置文件時常用的格式有:
- json 格式字符串
- xml 文件
- yml 格式文件
- toml 格式文件
- ini 格式文件
常用的golang配置文件讀取庫目前市面上也有很多,其中我認為Viper更適合于這個框架的使用,因此本次框架中使用該組件庫作為配置文件的管理組件。
2.2、安裝Viper
go get github.com/spf13/viper
2.3、創建啟動函數,并增加初始化功能,作為框架啟動時的初始化模塊。
package beginimport ("bufio""flag""fmt""github.com/spf13/viper""os""strings"
)// Start 主配置啟動函數
func Start() error {sysConfigDir := flag.String("d", "./conf/", "配置一個啟動配置文件存放目錄,默認:./conf/")flag.Parse()sysConfigName := flag.String("n", "sys", "配置啟動配置文件名稱,默認:sys")flag.Parse()sysConfigType := flag.String("t", "toml", "配置啟動配置文件類型,默認:toml")flag.Parse()// 加載啟動配置configLoad(*sysConfigDir, *sysConfigName, *sysConfigType)return nil
}func configLoad(sysConfigDir, sysConfigName, sysConfigType string) {// 設定讀取名稱viper.SetConfigName(sysConfigName)// 設定配置文件類型viper.SetConfigType(sysConfigType)// 設定掃描目錄viper.AddConfigPath(sysConfigDir)// 讀取配置文件if err := viper.ReadInConfig(); err != nil {if _, ok := err.(viper.ConfigFileNotFoundError); ok {reader := bufio.NewReader(os.Stdin)fmt.Println("沒有找到配置文件,是否自動創建默認配置文件并啟動?y/n")// Config file not found; ignore error if desiredfor ok {fmt.Print("-> ")isContinue, err := reader.ReadString('\n')if err != nil {panic(fmt.Errorf("發生致命錯誤: %w \n", err))break} else {// 轉換為小寫并去除前后空格isContinue = strings.TrimSpace(strings.ToLower(isContinue))// 判斷輸入是否正確if isContinue == "y" || isContinue == "yes" || isContinue == "0" {// 正常進行//TODO 調用自動化創建初始配置文件函數break} else if isContinue == "n" || isContinue == "no" || isContinue == "1" {// 結束break}}}} else {// Config file was found but another error was producedpanic(fmt.Errorf("配置文件致命錯誤: %w \n", err))}}
}
2.4、進行啟動測試,讀取和命令行輸入確認有效完成。
func main() {begin.Start()
}
到這里我們就創建完成了這個框架的基礎框架包結構和配置文件讀取功能和啟動時命令參數設定功能,下一節我們對于該部分的初始配置文件和缺失時如何創建進行代碼補充,歡迎持續關注,同時在搭建過程中遇到的一些代碼小知識我也會同步整理出來制作成小demo便于大家學習使用。
注:
這個框架我的初步想法時后續增加可視化頁面、代碼快速生成模塊、項目框架快速生成模塊等等,有其他需求想法的小伙伴歡迎在評論區留言或直接到代碼倉庫中提出寶貴的issue
歡迎大家積極start,大家的關注是我最大的動力。
本文聲明:

88x31.png
知識共享許可協議
本作品由 cn華少 采用 知識共享署名-非商業性使用 4.0 國際許可協議 進行許可。
? 著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務

喜歡的朋友記得點贊、收藏、關注哦!!!