目录
组件
config.go 公共参数
var ( // BConfig是程序中s默认的配置变量 BConfig *Config // AppConfig保存着文件中的配置项,使用的是 config包下的接口 AppConfig *beegoAppConfig // AppPath是程序的绝对路径 AppPath string // GlobalSessions是管理 session的实例 GlobalSessions *session.Manager // appConfigPath 是配置文件的保存路径 appConfigPath string // appConfigProvider is the provider for the config, default is ini appConfigProvider = "ini" )
BConfig : 包含了App运行过程中需要用到的配置信息 。 Config实体中包含了Listen、WebConfig 、SessionConfig、LogConfig四个常用配置实体
AppConfig : 配置文件的解析接口 , 用来解析配置文件,初始化BConfig
beegoAppConfig struct
封装了config.Configer接口,并由newAppConfig 方法完成实例化。beegoAppConfig的方法基本上都是由configer的不同实现来完成的。
type beegoAppConfig struct {
innerConfig config.Configer
}
// 根据配置的配置器名("xml"等),获得对应的配置器实例
func newAppConfig(appConfigProvider, appConfigPath string) (*beegoAppConfig, error) {
ac, err := config.NewConfig(appConfigProvider, appConfigPath)
if err != nil {
return nil, err
}
return &beegoAppConfig{ac}, nil
}
config.Configer接口
type Configer interface {
Set(key, val string) error //support section::key type in given key when using ini type.
String(key string) string //support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
Strings(key string) []string //get string slice
Int(key string) (int, error)
Int64(key string) (int64, error)
Bool(key string) (bool, error)
Float(key string) (float64, error)
DefaultString(key string, defaultVal string) string // support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultVal []string) []string //get string slice
DefaultInt(key string, defaultVal int) int
DefaultInt64(key string, defaultVal int64) int64
DefaultBool(key string, defaultVal bool) bool
DefaultFloat(key string, defaultVal float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
}
config.Config 接口
//该接口提供了实例化configer接口的两个方法
type Config interface {
Parse(key string) (Configer, error)
ParseData(data []byte) (Configer, error)
}
//这是一个各种不同Config实现的map对象
var adapters = make(map[string]Config)
//这是注册配置文件解析器的方法,先注册,然后就可以初始化了。
func Register(name string, adapter Config) {
if adapter == nil {
panic("config: Register adapter is nil")
}
if _, ok := adapters[name]; ok {
panic("config: Register called twice for adapter " + name)
}
adapters[name] = adapter
}
//config.go -> newAppConfig(...){ config.newConfig(...)}
//根据解析器类型和文件路径初始化configer解析器的方法
func NewConfig(adapterName, filename string) (Configer, error) {
adapter, ok := adapters[adapterName]
if !ok {
return nil, fmt.Errorf("config: unknown adaptername %q (forgotten import?)", adapterName)
}
return adapter.Parse(filename)
}
初始化的流程
1、beego.Run(){
addr := BConfig.Listen.HTTPAddr
//BConfig.Listen.HTTPAddr的访问,将触发 config.go -> init方法
}
2、config.go -> init()
func init() {
AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0]))
os.Chdir(AppPath)
// 初始化 BCconfig变量
BConfig = &Config{
//默认的配置项
}
//拼接地址
appConfigPath = filepath.Join(AppPath, "conf", "app.conf")
if !utils.FileExists(appConfigPath) {
//如果文件不存在,则初始化一个空配置项
AppConfig = &beegoAppConfig{innerConfig: config.NewFakeConfig()}
return
}
// 解析配置项,并保存在 BConfig中
// 采用默认的解析实现 , 解析文件
if err := parseConfig(appConfigPath); err != nil {
panic(err)
}
}
本文介绍了Beego框架中配置管理的实现方式,包括关键结构如beegoAppConfig、Configer接口及Config接口的作用与实现细节。同时阐述了配置初始化流程。

1502

被折叠的 条评论
为什么被折叠?



