使用Go解析.ini配置文件格式的操作教程
案例目標(biāo)
使用 Go 語言解析一個 .ini 格式的配置文件,提取其中的鍵值對,并按 section 分類存儲。
應(yīng)用場景
- • 開發(fā)需要加載外部配置(如數(shù)據(jù)庫、服務(wù)端口等)的小工具或服務(wù)
- • 學(xué)習(xí)如何讀取和解析結(jié)構(gòu)化文本
- • 簡易配置系統(tǒng)的實(shí)現(xiàn)
涉及知識點(diǎn)
- • 文件讀取與按行解析
- • 字符串處理:去空格、分割、前綴判斷
- •
map[string]map[string]string多層結(jié)構(gòu) - • 處理注釋和空行
示例配置文件(config.ini)
# 系統(tǒng)配置 [server] host = 127.0.0.1 port = 8080 [database] user = root password = 123456 dbname = testdb
示例代碼:簡單 INI 文件解析器
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func parseINI(filePath string) (map[string]map[string]string, error) {
config := make(map[string]map[string]string)
var currentSection string
file, 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
}
// 處理 section
if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
currentSection = strings.TrimSpace(line[1 : len(line)-1])
config[currentSection] = make(map[string]string)
} else {
// 處理 key=value
parts := 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
}
// 打印解析結(jié)果
for section, kv := range config {
fmt.Println("[" + section + "]")
for key, value := range kv {
fmt.Printf("%s = %s\n", key, value)
}
fmt.Println()
}
}
執(zhí)行輸出示例
[server] host = 127.0.0.1 port = 8080 [database] user = root password = 123456 dbname = testdb
技術(shù)說明
| 功能 | 用法 |
|---|---|
| 去除空格 | strings.TrimSpace() |
| 判斷開頭結(jié)尾 | strings.HasPrefix(), strings.HasSuffix() |
| 分割鍵值對 | strings.SplitN(str, "=", 2) |
| 多層 map 存儲結(jié)構(gòu) | map[section]map[key]value |
小結(jié)
通過本案例,你掌握了如何讀取 .ini 配置文件并將其解析為結(jié)構(gòu)化數(shù)據(jù),是很多服務(wù)啟動時加載配置的基礎(chǔ)實(shí)踐。
以上就是使用Go解析.ini配置文件格式的操作教程的詳細(xì)內(nèi)容,更多關(guān)于Go解析.ini文件格式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
重學(xué)Go語言之基礎(chǔ)數(shù)據(jù)類型詳解
Go語言有非常強(qiáng)大的數(shù)據(jù)類型系統(tǒng),其支持的數(shù)據(jù)類型大體上可分為四類:基礎(chǔ)數(shù)據(jù)類型、引用數(shù)據(jù)類型、接口類型、復(fù)合類型。本文就來講講它們各自的用法吧2023-02-02
Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)詳解
最近項(xiàng)目中需要用到鑒權(quán)機(jī)制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進(jìn)行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下2022-09-09
詳解如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)
這篇文章主要為大家詳細(xì)介紹了如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)(循環(huán)字符串、循環(huán)map結(jié)構(gòu)和循環(huán)Struct),文中的示例代碼代碼講解詳細(xì),需要的可以參考一下2022-10-10
go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn))
這篇文章主要為大家介紹了go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Go語言使用組合的方式實(shí)現(xiàn)多繼承的方法
這篇文章主要介紹了Go語言使用組合的方式實(shí)現(xiàn)多繼承的方法,實(shí)例分析了多繼承的原理與使用組合方式來實(shí)現(xiàn)多繼承的技巧,需要的朋友可以參考下2015-02-02
詳解Golang互斥鎖內(nèi)部實(shí)現(xiàn)
本篇文章主要介紹了詳解Golang互斥鎖內(nèi)部實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06

