美文网首页
beego config模块源码分析笔记二

beego config模块源码分析笔记二

作者: ljh123 | 来源:发表于2018-12-26 20:52 被阅读12次

    第二个文件,fake.go,这个文件130行代码左右,整个代码分析下来挺简单。
    这个包使用NewFakeConfig函数,使用这个文件里面定义的内容。从代码中得到两个内容,(1)不能被外部直接使用的结构体和(2)提供给外部开发者创建该结构体变量的方法。
    这个方法的实现是工厂模式中的一种,发现这种实现可以不需要开发者重复为map分配内存代码。
    内容:
    一、结构体
    type fakeConfigContainer struct

    type fakeConfigContainer struct {
        data map[string]string
    }
    
    func (c *fakeConfigContainer) getData(key string) string {
        return c.data[strings.ToLower(key)]
    }
    

    1)func (c *fakeConfigContainer) Set(key, val string) error
    先将key转化成小写,然后进行存储

    func (c *fakeConfigContainer) Set(key, val string) error {
        c.data[strings.ToLower(key)] = val  // 转换成小写
        return nil
    }
    

    2)func (c *fakeConfigContainer) String(key string) string
    通过key获取值

    func (c *fakeConfigContainer) String(key string) string {
        return c.getData(key)
    }
    

    3)func (c *fakeConfigContainer) DefaultString(key string, defaultval string) string
    如果key对应的值不为空,则返回原本存储的值,如果为空,则返回传入的那个值

    func (c *fakeConfigContainer) DefaultString(key string, defaultval string) string {
        v := c.String(key)
        if v == "" {
            return defaultval
        }
        return v
    }
    

    4)func (c *fakeConfigContainer) Strings(key string) []string
    根据key获取值,并将获取到的内容按 ; 进行切割成数组切片返回

    func (c *fakeConfigContainer) Strings(key string) []string {
        v := c.String(key)
        if v == "" {
            return nil
        }
        return strings.Split(v, ";")
    }
    

    5)func (c *fakeConfigContainer) DefaultStrings(key string, defaultval []string) []string
    和Strings类似,只不过当key对应的值为空的时候,返回默认内容

    func (c *fakeConfigContainer) DefaultStrings(key string, defaultval []string) []string {
        v := c.Strings(key)
        if v == nil {
            return defaultval
        }
        return v
    }
    

    6)func (c *fakeConfigContainer) Int(key string) (int, error)
    将值转化成int类型

    func (c *fakeConfigContainer) Int(key string) (int, error) {
        return strconv.Atoi(c.getData(key))
    }
    

    7)func (c *fakeConfigContainer) DefaultInt(key string, defaultval int) int
    将值转化成int类型,如果为空,则返回所设置的内容

    func (c *fakeConfigContainer) DefaultInt(key string, defaultval int) int {
        v, err := c.Int(key)
        if err != nil {
            return defaultval
        }
        return v
    }
    

    8)func (c *fakeConfigContainer) Int64(key string) (int64, error)

    func (c *fakeConfigContainer) Int64(key string) (int64, error) {
        return strconv.ParseInt(c.getData(key), 10, 64)
    }
    

    9)func (c *fakeConfigContainer) DefaultInt64(key string, defaultval int64) int64

    func (c *fakeConfigContainer) DefaultInt64(key string, defaultval int64) int64 {
        v, err := c.Int64(key)
        if err != nil {
            return defaultval
        }
        return v
    }
    

    10)func (c *fakeConfigContainer) Bool(key string) (bool, error)

    func (c *fakeConfigContainer) Bool(key string) (bool, error) {
        return ParseBool(c.getData(key))
    }
    

    11)func (c *fakeConfigContainer) DefaultBool(key string, defaultval bool) bool

    func (c *fakeConfigContainer) DefaultBool(key string, defaultval bool) bool {
        v, err := c.Bool(key)
        if err != nil {
            return defaultval
        }
        return v
    }
    

    12)func (c *fakeConfigContainer) Float(key string) (float64, error)

    func (c *fakeConfigContainer) Float(key string) (float64, error) {
        return strconv.ParseFloat(c.getData(key), 64)
    }
    

    13)func (c *fakeConfigContainer) DefaultFloat(key string, defaultval float64) float64

    func (c *fakeConfigContainer) DefaultFloat(key string, defaultval float64) float64 {
        v, err := c.Float(key)
        if err != nil {
            return defaultval
        }
        return v
    }
    

    14)func (c *fakeConfigContainer) DIY(key string) (interface{}, error)

    func (c *fakeConfigContainer) DIY(key string) (interface{}, error) {
        if v, ok := c.data[strings.ToLower(key)]; ok {
            return v, nil
        }
        return nil, errors.New("key not find")
    }
    

    15)func (c *fakeConfigContainer) GetSection(section string) (map[string]string, error)

    func (c *fakeConfigContainer) GetSection(section string) (map[string]string, error) {
        return nil, errors.New("not implement in the fakeConfigContainer")
    }
    

    16)func (c *fakeConfigContainer) SaveConfigFile(filename string) error

    func (c *fakeConfigContainer) SaveConfigFile(filename string) error {
        return errors.New("not implement in the fakeConfigContainer")
    }
    

    二、函数
    1)func NewFakeConfig() Configer

    func NewFakeConfig() Configer {
        return &fakeConfigContainer{
            data: make(map[string]string),
        }
    }
    

    相关文章

      网友评论

          本文标题:beego config模块源码分析笔记二

          本文链接:https://www.haomeiwen.com/subject/ebhklqtx.html