面试题答案
一键面试package main
import (
"encoding/xml"
"fmt"
)
// 定义商品结构体
type Product struct {
XMLName xml.Name `xml:"product"`
Name string `xml:"name"`
Price float32 `xml:"price"`
}
// 定义订单项结构体
type OrderItem struct {
XMLName xml.Name `xml:"order_item"`
Product Product `xml:"product"`
Quantity int `xml:"quantity"`
}
// 定义客户结构体
type Customer struct {
XMLName xml.Name `xml:"customer"`
Name string `xml:"name"`
Address string `xml:"address"`
}
// 定义订单结构体
type Order struct {
XMLName xml.Name `xml:"order"`
Customer Customer `xml:"customer"`
OrderItems []OrderItem `xml:"order_items>order_item"`
}
// 编码函数
func EncodeToXML(order Order) ([]byte, error) {
xmlData, err := xml.MarshalIndent(order, "", " ")
if err != nil {
return nil, err
}
return append([]byte(xml.Header), xmlData...), nil
}
// 解码函数
func DecodeFromXML(xmlData []byte) (Order, error) {
var order Order
err := xml.Unmarshal(xmlData, &order)
if err != nil {
return Order{}, err
}
return order, nil
}
你可以使用以下方式调用这些函数:
func main() {
// 初始化订单数据
order := Order{
Customer: Customer{
Name: "John Doe",
Address: "123 Main St",
},
OrderItems: []OrderItem{
{
Product: Product{
Name: "Laptop",
Price: 1000.00,
},
Quantity: 1,
},
{
Product: Product{
Name: "Mouse",
Price: 50.00,
},
Quantity: 2,
},
},
}
// 编码为XML
xmlData, err := EncodeToXML(order)
if err != nil {
fmt.Printf("编码错误: %v\n", err)
return
}
fmt.Println(string(xmlData))
// 解码XML
decodedOrder, err := DecodeFromXML(xmlData)
if err != nil {
fmt.Printf("解码错误: %v\n", err)
return
}
fmt.Printf("解码后的订单: %+v\n", decodedOrder)
}