wego使用了INI格式的配置文件来管理配置参数。wego应用中的参数分为系统参数(wego框架使用的参数)和业务参数,这些参数可使用编码的方式来设置,但最佳的方法是使用配置文件。wego使用InitWeb()初始化函数来加载配置文件,并自动给系统参数赋值。使用InitWeb()函数初时可以指定一个配置文件,若没有指定则使用缺省的配置文件:./app.conf。
func main() {
web, err := wego.InitWeb()
if err != nil{
log.Error(err)
return
}
err = web.Run()
if err != nil {
log.Error(err)
}
}
调用wego.InitWeb()后wego会自动将系统参数解析到WebEngine.Config中,业务参数则需要用户自己调用配置数据的GetXXX函数来获取。例如:若在配置文件中定义了数据库信息:
#应用名称
app_name = demo2
#mysql数据库的配置参数
mysql = root:rootpwd@tcp(127.0.0.1:3306)/demp?charset=utf8
在程序中可以按照下面的方式来获取mysql的配置:
func main() {
web, err := wego.InitWeb()
if err != nil{
log.Error(err)
return
}
mysql_cnn := web.Config.GetString("mysql")
if mysql_cnn.Error != nil {
log.Error(mysql_cnn.Error)
return
}
log.Info(mysql_cnn.Value)
err = web.Run()
if err != nil {
log.Error(err)
}
}
使用wego的config模块,也可以将配置信息直接绑定到struct, 例如定义redis相关的参数:
type RedisParam struct {
//Redis地址
Address string `ini:"address"`
//Redis登录密码
DbPwd string `ini:"db_pwd"`
}
配置文件内容为:
#应用名称
app_name = demo2
[redis]
#Redis地址
address = 127.0.0.1
#Redis登录密码
db_pwd = demopwd
则读取redis的信息的代码如下:
func main() {
web, err := wego.InitWeb()
if err != nil{
log.Error(err)
return
}
var redisParam RedisParam
err = web.Config.Section("redis").GetStruct(&redisParam)
if err != nil {
log.Error(err)
return
}
log.Info(redisParam)
err = web.Run()
if err != nil {
log.Error(err)
}
}
一个配置文件的示例:
#应用名称
app_name = demo2
#部署名称
server_name = demo
#是否显示请求日志
show_url_log = true
#是否显示sql日志
show_sql_log = true
[server]
#http监听端口
http_port = 8080
[session]
#session 是否开启
session_on = true
#session类型:cookie、cache
session_store=cookie
#客户端的cookie的名称
cookie_name = "wego2"
#session 过期时间, 单位秒
life_time = 3600
#session数据的hash字符串
hash_key = 11223344
[dlog]
#终端类型: 0 终端 1 文件
output = 1
#日志级别: 0 OFF 1 FATAL 2 ERROR 3 WARN 4 INFO 5 DEBUG
level = 5
#文件路径
path = ./logs
#是否在日志里面显示源码文件名和行号
show_caller = true
#是否将json、xml展开显示
show_indent = true
配置文件参数说明:
type WebConfig struct {
//应用名称
AppName string `ini:"app_name"`
//服务器名称
ServerName string `ini:"server_name"`
//缓是否开启缓存
CacheOn bool `ini:"cache_on"`
//cache类型:redis、memcache、memory
CacheStore string `ini:"cache_store;default=memory"`
//是否显示请求日志,默认为 true
ShowUrlLog bool `ini:"show_url_log;default=true"`
//是否显示请求日志,默认为 true
ShowSqlLog bool `ini:"show_sql_log;default=true"`
//设置调试日志级别:0 OFF 1 FATAL 2 ERROR 3 WARN 4 INFO 5 DEBUG
ShowDebugLog int `ini:"show_debug_log"`
//防JSON劫持的前缀字符串
JsonPrefix string `ini:"json_prefix"`
//获取client ip的header
IPHeader string `ini:"ip_header"`
//Web服务配置
ServerParam ServerConfig `ini:"server"`
//Session配置
SessionParam SessionConfig `ini:"session"`
//内存缓存配置
MemoryDbParam MemoryDbConfig `ini:"memory"`
//Redis缓存配置
RedisParam RedisConfig `ini:"redis"`
//Memcache缓存配置
MemcacheParam MemcacheConfig `ini:"memcache"`
//日志模块配置
DlogParam DlogConfig `ini:"dlog"`
}
//Web服务配置
type ServerConfig struct {
//是否启用 HTTPS,默认是false
UseHttps bool `ini:"use_https"`
//Http监听地址,默认为空
HttpAddr string `ini:"http_addr"`
//Http监听端口,默认为 8080
HttpPort uint `ini:"http_port;default=8080"`
//Https监听地址,默认为空
HttpsAddr string `ini:"https_addr"`
//Https监听端口,默认为 10443
HttpsPort uint `ini:"https_port;default=10443"`
//HTTPS证书路径
HttpsCertFile string `ini:"cert_file"`
//HTTPS证书 keyfile 的路径
HttpsKeyFile string `ini:"key_file"`
//设置 HTTP 的超时时间
ReadTimeout time.Duration `ini:"read_timeout"`
//设置 HTTP 的超时时间
WriteTimeout time.Duration `ini:"write_timeout"`
//POST请求的默认内存缓存大小,单位:M
MaxBody int64 `ini:"max_body"`
//是否开启 gzip,输出的内容会进行 gzip,根据Accept-Encoding来判断
EnableGzip bool `ini:"gzip_on"`
//压缩长度阈值
GzipSize int64 `ini:"gzip_size"`
}
//Session配置
type SessionConfig struct {
//缓是否开启session, 默认为 false
SessionOn bool `ini:"session_on"`
//session类型:cookie、cache
SessionStore string `ini:"session_store;default=cookie"`
//客户端的cookie的名称前缀
CookieName string `ini:"cookie_name;default=wego"`
//保存session数据的cookie域名, 默认空
Domain string `ini:"domain"`
//session 过期时间,单位:秒,默认值是3600
LifeTime uint `ini:"life_time;default=3600"`
//设置cookie的SameSite属性
SameSite http.SameSite `ini:"samesite"`
//session数据的hash字符串,若session的存储类型为cookie,则必须提供
HashKey string `ini:"hash_key"`
}
//日志模块配置
type DlogConfig struct {
//日志输出类型配置,0 终端 1 文件
Output int `ini:"output"`
//日志输出级别: 0 OFF 1 FATAL 2 ERROR 3 WARN 4 INFO 5 DEBUG
Level int `ini:"level;default=5"`
//日志文件存储路径,缺省:logs
Path string `ini:"path;default=logs"`
//是否在日志里面显示源码文件名和行号,默认 true
ShowCaller bool `ini:"show_caller;default=true"`
//是否将json、xml缩进显示
ShowIndent bool `ini:"show_indent;default=true"`
}