ZBLOG

func DelIniConfig(dir string, filename string,delItem string, lc *logrus.Logger) error { f := fmt.Sprintf("%s/%s", dir, filename) lc.Infof("load file %s", f) if IsFileExisted(f) != true { lc.Errorf("File %s is not existed", f) return fmt.Er...

在你提供的 DelIniConfig 函数中,修改 INI 文件时可能会导致格式变化的原因主要是因为 ini 包的行为。具体来说,在使用 cfg.Section("").Key(delItem).SetValue("") 时,如果 delItem 对应的键不存在,它可能会创建一个新的键并将其值设置为空,这样就会在 INI 文件中生成一行以空格开头的新条目。

为了避免这种情况,并确保该项仅被删除,而不是设置为新值,可以考虑使用更直接的方法来删除该键。例如,使用以下代码片段代替现有的 SetValue 方法:

if cfg.Section("").HasKey(delItem) {
    if err := cfg.Section("").DeleteKey(delItem); err != nil {
        lc.Errorf("Failed to delete key %s", delItem)
        return err
    }
}

完整修订后的函数如下:

func DelIniConfig(dir string, filename string, delItem string, lc *logrus.Logger) error {
    f := fmt.Sprintf("%s/%s", dir, filename)
    lc.Infof("load file %s", f)

    if IsFileExisted(f) != true {
        lc.Errorf("File %s is not existed", f)
        return fmt.Errorf("File %s is not existed", f)
    }

    cfg, err := ini.Load(f)
    if err != nil {
        lc.Errorf("load file (%s) failed: %v", f, err)
        return err
    }

    // 检查并删除指定的配置项
    if cfg.Section("").HasKey(delItem) {
        if err := cfg.Section("").DeleteKey(delItem); err != nil {
            lc.Errorf("Failed to delete key %s: %v", delItem, err)
            return err
        }
    }

    if err := cfg.SaveTo(f); err != nil {
        lc.Errorf("Save config file failed: %v", err)
        return err
    }

    return nil
}

通过这种方式,你可以安全地从 INI 文件中删除指定的键而不影响其他格式。如果要完全清除某个配置项,确保使用正确的方法。希望这对你有所帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21314

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?