Go語言中的文件與IO:JSON、CSV、XML處理

在數據交換與存儲中,JSON、CSV、XML 是常見格式。Go 標準庫為這些格式提供了強大且易用的支持,涵蓋結構體映射、讀寫文件、編碼解碼等操作。


一、JSON處理(encoding/json

1. 基本使用:結構體 <-> JSON
type?User?struct?{Name??string?`json:"name"`Age???int????`json:"age"`Email?string?`json:"email,omitempty"`?//?可選字段
}user?:=?User{Name:?"Alice",?Age:?30}
data,?_?:=?json.Marshal(user)
fmt.Println(string(data))?//?{"name":"Alice","age":30}
2. 反序列化 JSON -> 結構體
jsonStr?:=?`{"name":"Bob","age":25}`
var?u?User
err?:=?json.Unmarshal([]byte(jsonStr),?&u)
fmt.Printf("%+v\n",?u)
3. 處理嵌套結構、數組、map
type?Post?struct?{ID?????intAuthor?UserTags???[]string
}post?:=?Post{ID:?1,?Author:?user,?Tags:?[]string{"go",?"json"}}
jsonBytes,?_?:=?json.MarshalIndent(post,?"",?"??")
fmt.Println(string(jsonBytes))

二、CSV處理(encoding/csv

CSV 通常用于表格數據、Excel 導出等,Go 提供簡單讀寫接口。

1. 寫入 CSV 文件
file,?_?:=?os.Create("data.csv")
defer?file.Close()writer?:=?csv.NewWriter(file)
writer.Write([]string{"Name",?"Age",?"Email"})
writer.Write([]string{"Tom",?"22",?"tom@example.com"})
writer.Flush()
2. 讀取 CSV 文件
file,?_?:=?os.Open("data.csv")
defer?file.Close()reader?:=?csv.NewReader(file)
records,?_?:=?reader.ReadAll()
for?_,?record?:=?range?records?{fmt.Println(record)
}
3. 自定義分隔符(如?;
reader?:=?csv.NewReader(file)
reader.Comma?=?';'

CSV 不支持結構體直接映射,需手動轉換。


三、XML處理(encoding/xml

1. 基本結構體標簽
type?Note?struct?{To??????string?`xml:"to"`From????string?`xml:"from"`Message?string?`xml:"message"`
}
2. 序列化:結構體 -> XML
note?:=?Note{"Tom",?"Jerry",?"Hello,?XML!"}
data,?_?:=?xml.MarshalIndent(note,?"",?"??")
fmt.Println(xml.Header?+?string(data))

輸出:

<?xml?version="1.0"?encoding="UTF-8"?>
<Note><to>Tom</to><from>Jerry</from><message>Hello,?XML!</message>
</Note>
3. 反序列化:XML -> 結構體
input?:=?`<Note><to>Tom</to><from>Jerry</from><message>Hi</message></Note>`
var?n?Note
xml.Unmarshal([]byte(input),?&n)
fmt.Printf("%+v\n",?n)
4. 屬性與嵌套結構
type?Book?struct?{Title??string?`xml:"title,attr"`Author?string?`xml:"author"`
}type?Library?struct?{XMLName?xml.Name?`xml:"library"`Books???[]Book???`xml:"book"`
}

四、三者對比與適用場景

格式特點場景
JSON結構清晰、易于網絡傳輸Web API、前后端通信
CSV體積小、表格友好報表導入導出、數據分析
XML可擴展、支持屬性與命名空間配置文件、SOAP、嵌套數據

五、實戰建議

  • ? 使用?json.MarshalIndent?便于調試輸出。
  • ? 自定義字段名與?omitempty?控制輸出字段。
  • ??csv?通常用于輕量級數據交換,不建議嵌套。
  • ? 解析 XML 時注意標簽與命名空間。

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

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

相關文章

三種語言寫 MCP

參考 https://zhuanlan.zhihu.com/p/1915029704936760261 https://www.5ee.net/archives/tmXJAgWz https://github.com/modelcontextprotocol/python-sdk https://github.com/modelcontextprotocol/typescript-sdk https://modelcontextprotocol.io/quickstart/server https:/…

Python訓練營-Day38-Dataset和Dataloader類

在遇到大規模數據集時&#xff0c;顯存常常無法一次性存儲所有數據&#xff0c;所以需要使用分批訓練的方法。為此&#xff0c;PyTorch提供了DataLoader類&#xff0c;該類可以自動將數據集切分為多個批次batch&#xff0c;并支持多線程加載數據。此外&#xff0c;還存在Datase…

SVN上傳代碼

SVN&#xff08;Subversion&#xff09;是一個常用的版本控制系統&#xff0c;提供了對代碼管理和協作的支持。以下是SVN常見操作&#xff08;如獲取代碼、上傳代碼、合并沖突處理等&#xff09;的命令行流程及實例&#xff1a; 1. 獲取代碼&#xff08;Checkout&#xff09; 在…

【appium】2.初始連接腳本配置

連接配置 from appium import webdriver desired_caps {platformName: Android,automationName: UIAutomator2,deviceName: ZTEB880,appPackage: com.taobao.taobao,appActivity: com.taobao.tao.welcome.Welcome,noReset: True }driver webdriver.Remote(http://localhost:…

FliTik翻頁時鐘v1.1.25.36,支持安卓TV/手機/車機+windows電腦端

FliTik翻頁時鐘v1.1.25.36&#xff0c;支持安卓TV/手機/車機windows電腦端 FliTik翻頁時鐘是一款集高顏值與強大功能于一身的全平臺數字時鐘工具類應用&#xff0c;支持TV、iOS、安卓、PC以及鴻蒙系統。它不僅擁有精美的翻頁動畫…

以AI賦能創意未來:即夢3.0與Seedance1.0Lite重磅登陸POE!

近年來&#xff0c;隨著人工智能技術的不斷突破&#xff0c;AI模型的應用場景也在逐漸拓寬。在這一過程中&#xff0c;如何整合和利用現有的AI技術&#xff0c;實現更為便捷的創作服務&#xff0c;成為了許多科技企業關注的焦點。近日&#xff0c;全球知名的AI模型整合平臺POE正…

云計算與5G:如何利用5G網絡優化云平臺的性能

想象一下&#xff0c;你正在用手機看視頻、進行在線游戲&#xff0c;甚至是使用云存儲來保存你的重要文件。所有這些背后&#xff0c;其實都離不開一個無形的力量——云計算。而今天&#xff0c;5G網絡的出現&#xff0c;就像為這些云服務加裝了一對翅膀&#xff0c;讓它們飛得…

GPT-1 與 BERT 架構

GPT-1 架構特點 僅解碼器架構&#xff1a;擯棄了傳統transformer中的編碼器層&#xff0c;而是直接用解碼器和自注意力&#xff0c;同時拋棄掉了交叉多頭注意力層&#xff0c;自注意力通過mask來完成計算。注意力塊添加到12個&#xff0c;Attention的輸出維數為762維&#xff0…

Day04_C語言基礎數據結構重點復習筆記20250618

1.什么是計算機的大小端存儲&#xff1f; 答&#xff1a;大端是數據的高位字節存儲在低地址&#xff0c;低位字節存儲在高地址&#xff0c;網絡協議&#xff08;如TCP/IP&#xff09;通常采用大端序&#xff08;稱為“網絡字節序”&#xff09;。例如&#xff1a;32位整數 0x12…

基于OpenSSL實現AES-CBC 128算法的 SeedKey DLL的生成與使用

&#x1f345; 我是螞蟻小兵&#xff0c;專注于車載診斷領域&#xff0c;尤其擅長于對CANoe工具的使用&#x1f345; 尋找組織 &#xff0c;答疑解惑&#xff0c;摸魚聊天&#xff0c;博客源碼&#xff0c;點擊加入&#x1f449;【相親相愛一家人】&#x1f345; 玩轉CANoe&…

進程間通信、線程間通信

進程間通信、線程間通信 進程間通行&#xff08;Inter-Process Communication&#xff0c; IPC&#xff09;和線程間通信&#xff08;Thread Communication&#xff09;的方式不完全相同&#xff0c;因為進程和線程的運行環境和特性不同 進程和線程的本質區別 進程 進程是操…

【FPGA學習】FPGA入門學習即數字邏輯復習

前言&#xff1a;最近開始學習FPGA了&#xff0c;希望通過博客記錄下每一次學習的過程&#xff0c;與大家共勉。 目錄 一、組合邏輯電路的設計&#xff08;工程學習引入&#xff09; 二、3-8譯碼器設計、下載和功能演示&#xff08;在的8段數碼管顯示&#xff09; 2.1 Logs…

ffmpeg python rgba圖片合成 4444格式mov視頻,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""將BGRA四通道PNG序列轉換為ProRes 4444編碼的MOV視頻&#xff08;保留透明通道&#xff09;參數:input_pattern: PNG序列路徑模式&#xff08;如&#xff1a;"/path/to/frames/fram…

Java 實現 PDF 轉圖片功能:實戰教程 + 場景解析

作者:云起川南|專注 Java 實戰與自動化集成 在 PDF 文檔處理的各類業務場景中,“將 PDF 頁面轉為圖片”是一個高頻、剛需的功能,廣泛應用于 預覽展示、文件歸檔、圖片加密水印、OCR 文本識別 等系統中。 本文將帶你一步一步實戰如何使用 Java 實現 PDF 轉圖片 功能,使用開…

面試題-有個對象key全部是string,值全部是number要定義他,不使用interface和type如何定義

在 TypeScript 里&#xff0c;若要定義一個鍵為string類型、值為number類型的對象&#xff0c;并且不使用interface和type&#xff0c;可以采用以下幾種方式&#xff1a; 1. 內聯類型注解&#xff08;Inline Type Annotation&#xff09; 直接在變量聲明時使用索引簽名進行類…

領域驅動設計(DDD)【3】之事件風暴

文章目錄 說明一 事件風暴理論知識1.1 事件風暴的核心目標1.2事件風暴的關鍵步驟1.2.1 準備工作1.2.2 核心流程1.2.3 事件風暴的輸出 1.3 事件風暴的優勢1.4 常見問題Q1&#xff1a;事件風暴適合所有項目嗎&#xff1f;Q2&#xff1a;事件風暴后如何落地&#xff1f;Q3&#xf…

Vue3中監聽 Ref 類型的數字數組

在 Vue 3 中&#xff0c;監聽一個 Ref 類型的數字數組&#xff08;如 ref<number[]>([])&#xff09;時&#xff0c;根據需求的不同&#xff0c;有幾種監聽方式&#xff1a; 1. 監聽整個數組的引用變化 當整個數組被重新賦值時觸發&#xff1a; typescript 復制 下載…

PoolThreadCache 類的結構和源碼實現

PoolThreadCache 在 Netty 的內存池中扮演著線程本地緩存的角色。它的主要目的是減少線程在分配內存時對全局 PoolArena 的競爭&#xff0c;通過緩存一部分最近釋放的內存塊&#xff0c;使得同一線程后續申請相同規格的內存時能夠快速獲取&#xff0c;從而提高分配效率。 下面…

Linux中的阻塞信號與信號原理

在Linux操作系統中&#xff0c;信號&#xff08;Signal&#xff09;是進程間通信和進程控制的核心機制之一。信號是一種異步通知機制&#xff0c;可以向進程發送異步事件通知&#xff0c;以便進程能夠處理系統級別的事件。本文將詳細探討Linux中的信號原理&#xff0c;重點講解…

QT學習教程(三十五)

事件處理&#xff08;- Event Processingn&#xff09; 事件是視窗系統或者Qt 本身在各種不同的情況下產生的。當用戶點擊或者釋放鼠標&#xff0c;鍵盤時&#xff0c;一個鼠標事件或者鍵盤事件就產生了。當窗口第一次顯示時&#xff0c;一個繪制事件會產生告訴新可見的窗口繪…