golang面经必学之encoding包的用法和场景

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)}
}

场景用例

  1. Web开发:在Web应用中序列化和反序列化JSON数据,与前端进行数据交换。
  2. 配置文件:使用JSON或XML作为配置文件格式,进行配置数据的读写。
  3. 数据交换:在不同的系统或服务之间交换数据时使用JSON或XML格式。
  4. 数据分析:读取和写入CSV文件,进行数据导入和导出。
  5. 报告生成:生成JSON或XML格式的报告,供其他系统或服务消费。
  6. API开发:设计RESTful API时,使用JSON作为主要的数据交换格式。

encoding包及其子包提供了丰富的数据编码和解码功能,是处理不同数据格式和进行数据交换的重要工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值