Ainx的全局配置

📕作者简介:过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。

📗本文收录于Ainx系列,大家有兴趣的可以看一看

📘相关专栏Rust初阶教程go语言基础系列、spring教程等,大家有兴趣的可以看一看

📙Java并发编程系列,设计模式系列、go web开发框架系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!

📙 本文大部分都是借鉴刘丹冰大佬的zinx框架和文章,更推荐大家去读大佬的原文,本文只是个人学习的记录

文章目录

Ainx的全局配置

随着架构逐步的变大,参数就会越来越多,为了省去我们后续大频率修改参数的麻烦,接下来Zinx需要做一个加载配置的模块,和一个全局获取Ainx参数的对象。

Ainx-V0.4增添全局配置代码实现

我们先做一个简单的加载配置模块,要加载的配置文件的文本格式,就选择比较通用的yaml格式,配置信息暂时如下:

config.yaml

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

go 复制代码
package utils

import (
	"ainx/ainterface"
	"fmt"
	"github.com/spf13/viper"
)

/*
存储一切有关Zinx框架的全局参数,供其他模块使用
一些参数也可以通过 用户根据 zinx.json来配置
*/
type GlobalSet struct {
	TcpServer ainterface.IServer //当前Zinx的全局Server对象
	Host      string             //当前服务器主机IP
	TcpPort   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

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,
	}
}

目录结构

shell 复制代码
│  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
│
└─utils
        globalload.go
相关推荐
Run1.1 小时前
深入解析 Linux 中动静态库的加载机制:从原理到实践
linux·运维·服务器
Yeats_Liao2 小时前
Go 语言 TCP 端口扫描器实现与 Goroutine 池原理
开发语言·tcp/ip·golang
我的golang之路果然有问题2 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
码农hbk2 小时前
linux ptrace 图文详解(七) gdb、strace跟踪系统调用
linux·服务器
264玫瑰资源库3 小时前
斗鱼娱乐电玩平台源码搭建实录
运维·服务器·游戏·娱乐
hotlinhao3 小时前
ThinkPHP6模型中多组条件逻辑或Or查询的使用
linux·服务器·数据库
mit6.8244 小时前
[OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
运维·服务器
ALex_zry4 小时前
跨Linux发行版CPU指令集兼容性深度解析与实践指南
linux·运维·服务器
ErizJ5 小时前
Golang | 迭代器模式
开发语言·golang·迭代器模式
健康的猪5 小时前
golang的cgo的一点小心得
开发语言·后端·golang