Go語言實戰案例-簡單配置文件(INI格式)解析器

以下是《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?配置文件并將其解析為結構化數據,是很多服務啟動時加載配置的基礎實踐。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90329.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用 PyTorch 實現全連接網絡識別 MNIST 手寫數字

目錄 一、什么是全連接網絡 二、代碼實現步驟 1. 導入必要的庫 2. 數據準備 3. 定義網絡結構 4. 模型訓練 5. 模型保存和加載 6. 預測單張圖片 7. 主函數 三、運行結果說明 四、小結 一、什么是全連接網絡 全連接神經網絡(Fully Connected Neural Networ…

vscode怎么安裝MINGW

下載: 第一步選擇MINGW官網:MinGW-w64 - for 32 and 64 bit Windows - SourceForge.net 點擊Files 點擊Toolchains targetting Win64 點擊第一個 Personal Builds 點擊mingw-builds 選擇8.1.0 點擊第二個 threads-posix 點擊第二個seh 最后左鍵點擊下…

CSS圖片分層設置

在CSS中實現圖片分層效果,主要通過定位屬性和層疊上下文控制。以下是核心實現方法和示例: 一、核心實現原理定位方式 使用 position: relative/absolute/fixed 使圖片脫離文檔流 .layer {position: absolute; /* 關鍵屬性 */top: 0;left: 0; }層疊控制 通…

GEMINUS 和 Move to Understand a 3D Scene

論文鏈接:https://arxiv.org/abs/2507.14456 代碼鏈接:https://github.com/newbrains1/GEMINUS 端到端自動駕駛的挑戰 端到端自動駕駛是一種“一站式”方法:模型直接從傳感器輸入(如攝像頭圖像)生成駕駛軌跡或控制信號…

算法與數據結構:線性表

C語言數據結構基礎:線性表詳解線性表是數據結構中最基礎、最常用的形式,就像一列整齊排隊的游客:每個元素有固定位置(前驅和后繼),長度可動態變化。在C語言中,它主要通過順序表(數組…

制作mac 系統U盤

使用 installinstallmacos.py(更兼容) 蘋果官方不提供所有歷史版本的安裝器,但可以通過一個開源腳本下載(Apple 提供的企業支持工具): git clone https://github.com/munki/macadmin-scripts.git cd macadm…

滲透部分總結

docker環境搭建以及dns等原理講解Docker搭建:Linux 系統上安裝 Docker 引擎并啟動服務:# 安裝Docker引擎 curl -fsSL https://get.docker.com | sh 通過 curl 下載并執行 Docker 官方的安裝腳本,這會自動配置 Docker 倉庫并安裝最新版本的 Do…

k8s pvc是否可綁定在多個pod上

1.pvc是否可綁定在多個podPVC 是否能被多個 Pod 使用,取決于它的 accessModes。PVC 的 accessModes是否支持多個 Pod 同時使用說明ReadWriteOnce (RWO)? 若多個Pod,需在相同節點上(僅允許被單個節點上的Pod掛載)常用于本地磁盤、…

如何加固Endpoint Central服務器的安全?(下)

Endpoint Central 作為企業終端管理的 “中樞系統”,掌控著全網終端的補丁推送、軟件部署、配置管理、遠程控制等關鍵權限,存儲著大量終端資產信息、用戶數據及企業策略配置。一旦服務器被攻破,攻擊者可能篡改管理指令(如推送惡意…

信息整合注意力IIA,通過雙方向注意力機制重構空間位置信息,動態增強目標關鍵特征并抑制噪聲

在遙感圖像語義分割等視覺任務中,編碼器 - 解碼器結構通過跳躍連接融合多尺度特征時,常面臨兩大挑戰:一是編碼器的局部細節特征與解碼器的全局語義特征融合時,空間位置信息易丟失,導致目標定位不準;二是復雜…

如何遷移jenkins至另一臺服務器

前言公司舊的服務器快到期了,需要將部署在其上的jenkins整體遷移到另一臺服務器,兩臺都是aws ec2服務器。文章主要提供給大家一種遷移思路,并不一定是最優解,僅供參考,大家根據實際情況自行選用和修改,舉一…

在vue中遇到Uncaught TypeError: Assignment to constant variable(常亮無法修改)

1.問題如下:2.出現這個問題的原因----在設計變量的時候采用了const來進行修飾,在修改的時候直接對其進行修改3.利用響應式變量的特點,修改為下面這樣就可以正常了

RCE隨筆-奇技淫巧(2)

Linux命令長度限制在7個字符的情況下&#xff0c;如何拿到shell <?php $param $_REQUEST[param]; If ( strlen($param) < 8 ) { echo shell_exec($param); }分析代碼&#xff1a;這段代碼傳入參數param然后進入if語句判斷是否小于8個字符&#xff0c;然后如果小于就會進…

設計模式九:構建器模式 (Builder Pattern)

動機(Motivation)1、在軟件系統中&#xff0c;有時候面臨著“一個復雜對象”的創建工作&#xff0c;其通常由各個部分的子對象用一定的算法構成&#xff1b;由于需求的變化&#xff0c;這個復雜對象的各個部分經常面臨著劇烈的變化&#xff0c;但是將它們組合在一起的算法卻相對…

如何高效合并音視頻文件

在自我學習或者進行視頻剪輯的時候&#xff0c;經常從資源網址下載音視頻分離的文件&#xff0c;例如audio_file1.m4a和video_1.mp4&#xff0c;之后需要把這兩個文件合并在一起。于是條件反射得想要利用剪映等第三方工具&#xff0c;進行音視頻的封裝。可惜不幸的是&#xff0…

虛幻 5 與 3D 軟件的協作:實時渲染,所見所得

《曼達洛人》的星際飛船在片場實時掠過虛擬荒漠&#xff0c;游戲開發者拖動滑塊就能即時看到角色皮膚的通透變化&#xff0c;實時渲染技術正以 “所見即所得” 的核心優勢&#xff0c;重塑著 3D 創作的整個邏輯。虛幻引擎 5&#xff08;UE5&#xff09;憑借 Lumen 全局光照和 N…

?Eyeriss 架構中的訪存行為解析(騰訊元寶)

?Eyeriss 架構中的訪存行為解析?Eyeriss 是 MIT 提出的面向卷積神經網絡&#xff08;CNN&#xff09;的能效型 NPU&#xff08;神經網絡處理器&#xff09;架構&#xff0c;其核心創新在于通過硬件結構優化訪存行為&#xff0c;以解決傳統 GPU 在處理 CNN 時因數據搬運導致的…

數字圖像處理(三:圖像如果當作矩陣,那加減乘除處理了矩陣,那圖像咋變):從LED冬奧會、奧運會及春晚等等大屏,到手機小屏,快來挖一挖里面都有什么

數字圖像處理&#xff08;三&#xff09;一、&#xff08;準備工作&#xff1a;咋玩&#xff0c;用什么玩具&#xff09;圖像以矩陣形式存儲&#xff0c;那矩陣一變、圖像立刻跟著變&#xff1f;1. Python Jupyter Notebook/Lab 庫 (NumPy, OpenCV, Matplotlib, scikit-image…

docker-desktop啟動失敗

報錯提示deploying WSL2 distributions ensuring main distro is deployed: checking if main distro is up to date: checking main distro bootstrap version: getting main distro bootstrap version: open \\wsl$\docker-desktop\etc\wsl_bootstrap_version: The network n…

基于FastMCP創建MCP服務器的小白級教程

以下是基于windows 11操作系統環境的開發步驟。 1、python環境搭建 訪問官網&#xff1a;https://www.python.org/。下載相應的版本&#xff08;如&#xff1a;3.13.5&#xff09;&#xff0c;然后安裝。 安裝完成之后&#xff0c;使用命令行工具輸入python&#xff0c;顯示…