Golang

beego源码(1) 配置加载

2019-02-15  本文已影响4人  Linrundong

beego.init()启动初始化

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

AppConfig 用户配置

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)
}
关于beego/config
上一篇下一篇

猜你喜欢

热点阅读