1. JSON 数据处理
JSON 是一种轻量级的数据交换格式,Go 提供了 encoding/json
包来处理 JSON 数据的解析和编码。
1.1 JSON 解码
以下代码展示了如何将 JSON 字符串解码为 Go 结构体。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( "encoding/json" "fmt" )
type Person struct { Name string `json:"name"` Age int `json:"age"` }
func main() { jsonData := `{"name": "Alice", "age": 25}` var person Person err := json.Unmarshal([]byte(jsonData), &person) if err != nil { fmt.Println("JSON 解码失败:", err) return } fmt.Printf("姓名:%s, 年龄:%d\\n", person.Name, person.Age) }
|
1.2 JSON 编码
将 Go 结构体编码为 JSON 字符串同样简单。
1 2 3 4 5 6 7
| person := Person{Name: "Bob", Age: 30} jsonData, err := json.Marshal(person) if err != nil { fmt.Println("JSON 编码失败:", err) return } fmt.Println("JSON 字符串:", string(jsonData))
|
2. XML 数据处理
XML 是一种常用于数据交换的标记语言。在 Go 中,可以使用 encoding/xml
包来解析和编码 XML 数据。
2.1 XML 解码
以下代码展示了如何将 XML 数据解码为 Go 结构体。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import ( "encoding/xml" "fmt" )
type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` }
func main() { xmlData := `<person><name>Charlie</name><age>28</age></person>` var person Person err := xml.Unmarshal([]byte(xmlData), &person) if err != nil { fmt.Println("XML 解码失败:", err) return } fmt.Printf("姓名:%s, 年龄:%d\\n", person.Name, person.Age) }
|
2.2 XML 编码
我们还可以将 Go 结构体编码为 XML 数据。
1 2 3 4 5 6 7
| person := Person{Name: "Diana", Age: 35} xmlData, err := xml.Marshal(person) if err != nil { fmt.Println("XML 编码失败:", err) return } fmt.Println("XML 数据:", string(xmlData))
|
3. CSV 数据处理
CSV 格式主要用于表格数据,Go 的 encoding/csv
包提供了读取和写入 CSV 文件的方法。
3.1 CSV 读取
以下代码展示了如何从 CSV 文件中读取数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import ( "encoding/csv" "fmt" "os" )
func main() { file, err := os.Open("data.csv") if err != nil { fmt.Println("打开 CSV 文件失败:", err) return } defer file.Close()
reader := csv.NewReader(file) records, err := reader.ReadAll() if err != nil { fmt.Println("读取 CSV 文件失败:", err) return } fmt.Println("CSV 内容:", records) }
|
3.2 CSV 写入
以下代码展示了如何将数据写入 CSV 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| file, err := os.Create("output.csv") if err != nil { fmt.Println("创建 CSV 文件失败:", err) return } defer file.Close()
writer := csv.NewWriter(file) data := [][]string{ {"Name", "Age"}, {"Eve", "24"}, {"Frank", "29"}, } writer.WriteAll(data) if err := writer.Error(); err != nil { fmt.Println("写入 CSV 文件失败:", err) }
|
4. 实用技巧
- 错误处理:在处理不同数据格式时,务必进行错误检查,以防止不符合预期的数据格式导致程序崩溃。
- 数据验证:在解析 JSON 和 XML 数据时,尽量使用结构体字段标签,以确保数据格式符合预期。
- 流式处理:对于大文件,可以考虑流式读取和写入,以节省内存。