encoding包
Go语言的encoding包是一个包含了用于数据编码和解码的接口和实现的包,其中最常用的子包有encoding/json、encoding/xml、encoding/csv等。以下是一些encoding包中常用子包的用法和场景用例:
encoding/json
用于处理JSON数据的编码和解码。
用法示例:
package main
import (
"encoding/json"
"fmt"
"log"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
Address string
}
func main() {
p := Person{Name: "Gopher", Age: 10, Email: "gopher@golang.org", Address: "GoLand"}
// 编码:将结构体编码为JSON
jsonData, err := json.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonData))
// 解码:将JSON解码为结构体
err = json.Unmarshal(jsonData, &p)
if err != nil {
log.Fatal(err)
}
fmt.Println(p)
}
encoding/xml
用于处理XML数据的编码和解码。
用法示例:
package main
import (
"encoding/xml"
"fmt"
"log"
)
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email,omitempty"`
Address string `xml:"address"`
}
func main() {
p := Person{Name: "Gopher", Age: 10, Email: "gopher@golang.org", Address: "GoLand"}
// 编码:将结构体编码为XML
xmlData, err := xml.Marshal(p)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(xmlData))
// 解码:将XML解码为结构体
err = xml.Unmarshal(xmlData, &p)
if err != nil {
log.Fatal(err)
}
fmt.Println(p)
}
encoding/csv
用于处理CSV文件的读写。
用法示例:
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
)
type Person struct {
Name string `csv:"name"`
Age int `csv:"age"`
}
func main() {
records := []Person{
{Name: "Gopher", Age: 10},
{Name: "Alice", Age: 30},
}
// 创建CSV writer
file, err := os.Create("people.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
// 编码:将结构体数组写入CSV
for _, record := range records {
err := writer.Write(mapToSlice(record))
if err != nil {
log.Fatal(err)
}
}
// 创建CSV reader
file, err = os.Open("people.csv")
if err != nil {
log.Fatal(err)
}
defer file.Close()
reader := csv.NewReader(file)
// 解码:从CSV读取数据
csvRecords, err := reader.ReadAll()
if err != nil {
log.Fatal(err)
}
fmt.Println(csvRecords)
}
// mapToSlice 将Person映射转换为[]string切片
func mapToSlice(p Person) []string {
return []string{p.Name, fmt.Sprintf("%d", p.Age)}
}
场景用例
- Web开发:在Web应用中序列化和反序列化JSON数据,与前端进行数据交换。
- 配置文件:使用JSON或XML作为配置文件格式,进行配置数据的读写。
- 数据交换:在不同的系统或服务之间交换数据时使用JSON或XML格式。
- 数据分析:读取和写入CSV文件,进行数据导入和导出。
- 报告生成:生成JSON或XML格式的报告,供其他系统或服务消费。
- API开发:设计RESTful API时,使用JSON作为主要的数据交换格式。
encoding包及其子包提供了丰富的数据编码和解码功能,是处理不同数据格式和进行数据交换的重要工具。