beego.init()启动初始化
- 默认配置对象:
BConfig *Config
- 自定义配置对象:
AppConfig *beegoAppConfig
func init() {
// 加载默认配置
BConfig = newBConfig()
// 确定配置文件路径
var filename = "app.conf"
appConfigPath = filepath.Join(workPath, "conf", filename)
// 加载配置文件
if err = parseConfig(appConfigPath); err != nil {
panic(err)
}
}
BConfig 默认配置
func newBConfig() *Config {
return &Config{
AppName: "beego",
RunMode: PROD,
RouterCaseSensitive: true,
ServerName: "beegoServer:" + VERSION,
RecoverPanic: true,
RecoverFunc: recoverPanic,
CopyRequestBody: false,
EnableGzip: false,
MaxMemory: 1 << 26, //64MB
EnableErrorsShow: true,
EnableErrorsRender: true,
Listen: Listen{
...
},
WebConfig: WebConfig{
...
},
Log: LogConfig{
...
},
}
}
- 默认填写了一些信息,还有Listen、WebConfig、Log几个方面的配置
- 重点关注RunMode 这项:根据DEV、PROD等可区分开发、生产不同环境的配置
AppConfig 用户配置
- appConfigProvider默认值是"ini",意味着默认读取的是ini配置格式
- assignConfig()主要创建了一个config对象,实例化时通过config包的Init(),调用config/ini.go的Parse()把配置项进行加载
type beegoAppConfig struct {
// 这里beegoAppConfig这个对象继承了config包中的Configer对象
innerConfig config.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)
}
// 这里传入了配置格式,文件路径
func newAppConfig(appConfigProvider, appConfigPath string) (*beegoAppConfig, error) {
// 默认返回ini格式的config对象
ac, err := config.NewConfig(appConfigProvider, appConfigPath)
if err != nil {
return nil, err
}
return &beegoAppConfig{ac}, nil
}
// now only support ini, next will support json.
func parseConfig(appConfigPath string) (err error) {
AppConfig, err = newAppConfig(appConfigProvider, appConfigPath)
if err != nil {
return err
}
return assignConfig(AppConfig)
}
- 执行完毕配置文件中的配置已存在于AppConfig中
关于beego/config
- config包内xml.go、yaml.go、ini.go、json.go文件中都有自己的init(),所以导入config包时就已生成了这四种格式的配置器
- config.NewConfig(appConfigProvider, appConfigPath)调用时相当于获取对应格式的配置器