From 3b99f37aa121fedaa87a5b19ea6a6d976ec3c75b Mon Sep 17 00:00:00 2001 From: slene Date: Sat, 11 Jan 2014 14:28:11 +0800 Subject: [PATCH] add a empty fake config Initialize AppConfig to avoid nil pointer runtime error. --- beego.go | 2 +- config.go | 1 + config/fake.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 config/fake.go diff --git a/beego.go b/beego.go index e4a96c17..c22719c6 100644 --- a/beego.go +++ b/beego.go @@ -192,7 +192,7 @@ func Run() { } if SessionOn { - var err error + var err error sessionConfig := AppConfig.String("sessionConfig") if sessionConfig == "" { sessionConfig = `{"cookieName":"` + SessionName + `",` + diff --git a/config.go b/config.go index 39a893c0..7c21d696 100644 --- a/config.go +++ b/config.go @@ -141,6 +141,7 @@ func init() { func ParseConfig() (err error) { AppConfig, err = config.NewConfig("ini", AppConfigPath) if err != nil { + AppConfig = config.NewFakeConfig() return err } else { HttpAddr = AppConfig.String("HttpAddr") diff --git a/config/fake.go b/config/fake.go new file mode 100644 index 00000000..05279932 --- /dev/null +++ b/config/fake.go @@ -0,0 +1,58 @@ +package config + +import ( + "errors" + "strconv" + "strings" +) + +type fakeConfigContainer struct { + data map[string]string +} + +func (c *fakeConfigContainer) getData(key string) string { + key = strings.ToLower(key) + return c.data[key] +} + +func (c *fakeConfigContainer) Set(key, val string) error { + key = strings.ToLower(key) + c.data[key] = val + return nil +} + +func (c *fakeConfigContainer) String(key string) string { + return c.getData(key) +} + +func (c *fakeConfigContainer) Int(key string) (int, error) { + return strconv.Atoi(c.getData(key)) +} + +func (c *fakeConfigContainer) Int64(key string) (int64, error) { + return strconv.ParseInt(c.getData(key), 10, 64) +} + +func (c *fakeConfigContainer) Bool(key string) (bool, error) { + return strconv.ParseBool(c.getData(key)) +} + +func (c *fakeConfigContainer) Float(key string) (float64, error) { + return strconv.ParseFloat(c.getData(key), 64) +} + +func (c *fakeConfigContainer) DIY(key string) (interface{}, error) { + key = strings.ToLower(key) + if v, ok := c.data[key]; ok { + return v, nil + } + return nil, errors.New("key not find") +} + +var _ ConfigContainer = new(fakeConfigContainer) + +func NewFakeConfig() ConfigContainer { + return &fakeConfigContainer{ + data: make(map[string]string), + } +}