使用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-02Go語言如何使用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-10go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn))
這篇文章主要為大家介紹了go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Go語言使用組合的方式實(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