
📕作者簡介: 過去日記,致力于Java、GoLang,Rust等多種編程語言,熱愛技術,喜歡游戲的博主。
📗本文收錄于Ainx系列,大家有興趣的可以看一看
📘相關專欄Rust初階教程、go語言基礎系列、spring教程等,大家有興趣的可以看一看
📙Java并發編程系列,設計模式系列、go web開發框架 系列正在發展中,喜歡Java,GoLang,Rust,的朋友們可以關注一下哦!
📙 本文大部分都是借鑒劉丹冰大佬的zinx框架和文章,更推薦大家去讀大佬的原文,本文只是個人學習的記錄
文章目錄
- Ainx的全局配置
- Ainx-V0.4增添全局配置代碼實現
- 創建全局參數文件
- 提供init初始化方法
Ainx的全局配置
隨著架構逐步的變大,參數就會越來越多,為了省去我們后續大頻率修改參數的麻煩,接下來Zinx需要做一個加載配置的模塊,和一個全局獲取Ainx參數的對象。
Ainx-V0.4增添全局配置代碼實現
我們先做一個簡單的加載配置模塊,要加載的配置文件的文本格式,就選擇比較通用的yaml格式,配置信息暫時如下:
config.yaml
Name: AinxServerApp
Version: V0.4
TcpPort: 8080
Host: 127.0.0.1
MaxConn: 12000
MaxPacketSize: 4096
現在我們需要建立一個全局配置信息的對象
創建全局參數文件
創建ainx/utils文件夾,在下面創建globalload.go文件,暫時編寫如下。
ainx/utils/globalload.go
package utilsimport ("ainx/ainterface""fmt""github.com/spf13/viper"
)/*
存儲一切有關Zinx框架的全局參數,供其他模塊使用
一些參數也可以通過 用戶根據 zinx.json來配置
*/
type GlobalSet struct {TcpServer ainterface.IServer //當前Zinx的全局Server對象Host string //當前服務器主機IPTcpPort string //當前服務器主機監聽端口號Name string //當前服務器名稱Version string //當前Zinx版本號MaxPacketSize uint32 //都需數據包的最大值MaxConn uint32 //當前服務器主機允許的最大鏈接個數
}
/*
定義一個全局的對象
*/
var GlobalSetting *GlobalSet
提供init初始化方法
然后我們提供一個init()方法,目的是初始化GlobalSetting 對象,和加載服務端應用配置文件在根目錄下config.yaml,這里為了支持對yaml文件的解析,引入了第三方庫viper,具體用法可以看中文文檔https://golang.halfiisland.com/community/pkgs/Viper.html
zinx/utils/globalobj.go
// todo 未來支持多種配置文件格式
// 讀取用戶的配置文件
func (g *GlobalSet) Reload() {vp := viper.New() //創建viper對象vp.SetConfigName("config") //配置文件的名稱vp.AddConfigPath("./")vp.SetConfigType("yaml") //配置文件的拓展名err := vp.ReadInConfig() //讀取配置文件的內容if err != nil {panic(err)}//將json數據解析到struct中err = vp.Unmarshal(&GlobalSetting)if err != nil {fmt.Println(GlobalSetting.Host)return}
}/*
提供init方法,默認加載
*/
func init() {//初始化GlobalObject變量,設置一些默認值GlobalSetting = &GlobalSet{Name: "AinxServerApp",Version: "V0.4",TcpPort: "8080",Host: "0.0.0.0",MaxConn: 12000,MaxPacketSize: 4096,}
}
目錄結構
│ config.yaml
│
├─ainterface
│ iconnection.go
│ irequest.go
│ irouter.go
│ iserver.go
│
├─anet
│ connection.go
│ request.go
│ router.go
│ server.go
│ server_test.go
│
├─examples
│ └─v03
│ ├─client
│ │ Client.go
│ │
│ └─server
│ Server.go
│
└─utilsglobalload.go