以下是《Go語言100個實戰案例》中的?文件與IO操作篇 - 案例20:簡單配置文件(INI格式)解析器?的完整內容,適合入門學習如何用 Go 語言解析常見的?.ini
?配置文件格式。
🎯 案例目標
使用 Go 語言解析一個?.ini
?格式的配置文件,提取其中的鍵值對,并按 section 分類存儲。
🧩 應用場景
- ? 開發需要加載外部配置(如數據庫、服務端口等)的小工具或服務
- ? 學習如何讀取和解析結構化文本
- ? 簡易配置系統的實現
🧠 涉及知識點
- ? 文件讀取與按行解析
- ? 字符串處理:去空格、分割、前綴判斷
- ??
map[string]map[string]string
?多層結構 - ? 處理注釋和空行
🗂? 示例配置文件(config.ini)
#?系統配置
[server]
host?=?127.0.0.1
port?=?8080[database]
user?=?root
password?=?123456
dbname?=?testdb
💻 示例代碼:簡單 INI 文件解析器
package?mainimport?("bufio""fmt""os""strings"
)func?parseINI(filePath?string)?(map[string]map[string]string,?error)?{config?:=?make(map[string]map[string]string)var?currentSection?stringfile,?err?:=?os.Open(filePath)if?err?!=?nil?{return?nil,?err}defer?file.Close()scanner?:=?bufio.NewScanner(file)for?scanner.Scan()?{line?:=?strings.TrimSpace(scanner.Text())//?忽略注釋和空行if?line?==?""?||?strings.HasPrefix(line,?"#")?||?strings.HasPrefix(line,?";")?{continue}//?處理?sectionif?strings.HasPrefix(line,?"[")?&&?strings.HasSuffix(line,?"]")?{currentSection?=?strings.TrimSpace(line[1?:?len(line)-1])config[currentSection]?=?make(map[string]string)}?else?{//?處理?key=valueparts?:=?strings.SplitN(line,?"=",?2)if?len(parts)?==?2?&&?currentSection?!=?""?{key?:=?strings.TrimSpace(parts[0])value?:=?strings.TrimSpace(parts[1])config[currentSection][key]?=?value}}}if?err?:=?scanner.Err();?err?!=?nil?{return?nil,?err}return?config,?nil
}func?main()?{iniPath?:=?"config.ini"config,?err?:=?parseINI(iniPath)if?err?!=?nil?{fmt.Println("解析失敗:",?err)return}//?打印解析結果for?section,?kv?:=?range?config?{fmt.Println("["?+?section?+?"]")for?key,?value?:=?range?kv?{fmt.Printf("%s?=?%s\n",?key,?value)}fmt.Println()}
}
📤 執行輸出示例
[server]
host?=?127.0.0.1
port?=?8080[database]
user?=?root
password?=?123456
dbname?=?testdb
🛠 技術說明
功能 | 用法 |
去除空格 | strings.TrimSpace() |
判斷開頭結尾 | strings.HasPrefix() ,?strings.HasSuffix() |
分割鍵值對 | strings.SplitN(str, "=", 2) |
多層 map 存儲結構 | map[section]map[key]value |
🧪 拓展練習
- ? 支持注釋中?
#
?和?;
?的雙重格式 - ? 支持值為數字、布爾值的自動識別與轉換
- ? 將解析結果導出為 JSON 文件
- ? 寫一個配置查詢函數:傳入 section 和 key,返回 value
? 小結
通過本案例,你掌握了如何讀取?.ini
?配置文件并將其解析為結構化數據,是很多服務啟動時加載配置的基礎實踐。