Go语言中的文件与IO:JSON、CSV、XML处理

简介: 本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。

 

在数据交换与存储中,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     int
    Author User
    Tags   []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 时注意标签与命名空间。

 

相关文章
|
10天前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
3月前
|
数据采集 JSON 自然语言处理
Go语言实战案例-统计文件中每个字母出现频率
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例19”教你如何统计文本文件中每个英文字母的出现频率。通过实战练习,掌握文件读取、字符处理、map统计等基础技能,适合Go语言初学者提升编程能力。
|
3月前
|
数据采集 Go
Go语言实战案例-批量重命名文件
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例17:批量重命名文件”,适合初学者学习使用 Go 操作文件系统,实现文件批量重命名功能,包括添加前缀、后缀或编号等。
|
3月前
|
JSON 缓存 Go
Go语言实战案例-向文件写入内容
本案例讲解如何使用 Go 语言向文件写入内容,涵盖覆盖写入与追加写入两种模式,适用于日志记录、报告生成等场景。涉及 `os.WriteFile`、`os.OpenFile` 等核心函数,并演示如何处理文件权限与编码问题。
|
3月前
|
Go 开发工具 git
Go语言实战案例-遍历目录下所有文件
本案例讲解如何使用 Go 语言递归遍历目录及其子目录中的所有文件。通过 `filepath.WalkDir` 函数实现目录遍历,涵盖文件判断、路径获取和错误处理等知识点,适用于文件管理、批量处理和查找特定类型文件等场景。
|
4月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
4月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
11月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
185 4
|
11月前
|
算法 大数据 Go
Go文件操作:掌握Go的文件读写与操作技巧
本文介绍了Go语言的文件操作功能,包括文件的打开、读写和关闭。Go语言通过`os`和`io`包提供了丰富的文件操作接口,使开发者能够轻松实现文件的读写和管理。文章详细讲解了核心概念、具体操作步骤和代码示例,并探讨了实际应用场景和未来发展趋势。
165 4
|
11月前
|
存储 前端开发 Go
Go 文件的读取操作
本文介绍了 Go 语言标准库中的 `os` 包和 `bufio` 包,重点讲解了 `os` 包中的 `Open` 和 `OpenFile` 函数及 `File` 结构体的 `Read` 方法,以及 `bufio` 包中的 `NewReader` 函数和 `Reader` 结构体的 `ReadString` 方法。通过示例代码展示了如何使用这些方法高效读取文件,减少磁盘操作。
159 2

热门文章

最新文章