From 99c0d3799541604df3abe328573ea50e507550f1 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Mon, 31 Aug 2026 16:42:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8):=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=86=E5=8C=BA=E5=92=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E5=AD=98=E5=9C=A8=E6=80=A7=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- goini.go | 54 ++++++++++++++++++----------------------------------- internal.go | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 36 deletions(-) diff --git a/goini.go b/goini.go index ad2b8eb..3185f0b 100644 --- a/goini.go +++ b/goini.go @@ -94,42 +94,6 @@ func (ini *GoINI) SaveFormatFile(filename string, perm os.FileMode) error { return nil } -func (ini *GoINI) save(data string) error { - if ini.filename == "" { - return errFilenameRequired - } - info, err := os.Stat(ini.filename) - if err != nil { - return err - } - return ini.saveFile(ini.filename, data, info.Mode().Perm()) -} - -func (ini *GoINI) saveFile(filename string, data string, perm os.FileMode) error { - if filename == "" { - return errFilenameRequired - } - perm = perm.Perm() - writePerm := perm | 0o200 - if info, err := os.Stat(filename); err == nil { - if info.Mode().IsRegular() { - if err := os.Chmod(filename, writePerm); err != nil { - return err - } - } - } else if !errors.Is(err, os.ErrNotExist) { - return err - } - if err := os.WriteFile(filename, []byte(data), writePerm); err != nil { - return err - } - if err := os.Chmod(filename, perm); err != nil { - return err - } - ini.filename = filename - return nil -} - // String 获取GoINI对象的字符串形式 // 返回: string 配置文件内容 func (ini *GoINI) String() string { @@ -229,6 +193,24 @@ func (ini *GoINI) GetNameKeys(name string, match string) []string { return matchStrings(ini.sectionKeys[name], match) } +// HasSection 判断分区是否存在 +// 入参: name 分区名称 +// 返回: bool 是否存在 +func (ini *GoINI) HasSection(name string) bool { + name = ini.normalizeSection(name) + _, ok := ini.sectionValues[name] + return ok +} + +// HasKey 判断分区下配置项是否存在 +// 入参: name 分区名称, key 配置项名称 +// 返回: bool 是否存在 +func (ini *GoINI) HasKey(name string, key string) bool { + name = ini.normalizeSection(name) + _, ok := ini.sectionValues[name][key] + return ok +} + // GetString 获取单个配置项的字符串值 // 入参: name 分区名称, key 配置项名称, value 默认值 // 返回: string 配置项值 diff --git a/internal.go b/internal.go index afd5aac..d5a7c71 100644 --- a/internal.go +++ b/internal.go @@ -1,6 +1,8 @@ package goini import ( + "errors" + "os" "reflect" "regexp" "strconv" @@ -143,6 +145,42 @@ func hasSurroundingQuotes(value string) bool { return first == last && (first == '"' || first == '\'' || first == '`') } +func (ini *GoINI) save(data string) error { + if ini.filename == "" { + return errFilenameRequired + } + info, err := os.Stat(ini.filename) + if err != nil { + return err + } + return ini.saveFile(ini.filename, data, info.Mode().Perm()) +} + +func (ini *GoINI) saveFile(filename string, data string, perm os.FileMode) error { + if filename == "" { + return errFilenameRequired + } + perm = perm.Perm() + writePerm := perm | 0o200 + if info, err := os.Stat(filename); err == nil { + if info.Mode().IsRegular() { + if err := os.Chmod(filename, writePerm); err != nil { + return err + } + } + } else if !errors.Is(err, os.ErrNotExist) { + return err + } + if err := os.WriteFile(filename, []byte(data), writePerm); err != nil { + return err + } + if err := os.Chmod(filename, perm); err != nil { + return err + } + ini.filename = filename + return nil +} + func (ini *GoINI) rebuildIndexes() { ini.sectionKeys = make(map[string][]string) ini.sectionOrder = nil