[beego]配置文件大小写不敏感导致GetSection函数失败(配置文件大小写不敏感导致GetSection函数失败)

2023-12-11 368 views
9

当我在配置文件中配置名称有大写字母的section,然后我调用GetSection函数,参数还是使用有大写的section名称,那么获取section就会失败。可能其他的配置文件获取函数也有同样的问题!名称需要在GetSection函数内部转换为小写,以保证配置文件中名称和密钥大小写不敏感的语义。

版本:v2.0.2 操作系统:windows 10 x86_64 当我在配置文件中配置大写字母的节名称时,然后调用 GetSection,大写字母的参数不会获取节内容。也许config的其他Get函数也有同样的问题!需要在GetSection内部转换后使用section的名称,以确保配置不区分大小写。

回答

2

这是设计问题。本来 Beego web 中的配置是不区分大小写的。

6

我恐怕对此无能为力。

8

这就是我的意思。配置文件有这么一段(app.conf)

[MySection]
name1=val1
name2=val2

那么调用下面的代码将会失败,什么也得不到,并返回一个不存在的错误。

web.AppConfig.GetSection("MySection")

我认为调用这个函数不应该失败,它应该进行大小写转换。所以看起来像这样

// GetSection returns map for the given section
func (c *IniConfigContainer) GetSection(section string) (map[string]string, error) {
    insensitive := strings.ToLower(section)
    if v, ok := c.data[insensitive]; ok {
        return v, nil
    }
    return nil, errors.New("not exist section")
}

由于它不区分大小写,因此用户不应感知到它。

1

我明白你的意思,但实际上我认为这是设计问题。我不想改变这种行为。在我看来,所有配置都应该区分大小写。我认为您可以使用其他文件作为配置文件,例如yamljson。这些应该区分大小写。