提交 b95fedf6 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 a8893615
# Golang标准库-json
对json编码和解码
## 两个核心函数
```go
// struct 转 json
func Marshal(v any) ([]byte, error) {}
// json 转 struct
func Unmarshal(data []byte, v any) error {}
```
示例
```go
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Email string
}
func main() {
person := Person{
Name: "Tom",
Age: 23,
Email: "123@qq.com",
}
// 序列化
b, _ := json.Marshal(person)
fmt.Printf("b: %v\n", string(b))
// b: {"Name":"Tom","Age":23,"Email":"123@qq.com"}
// 反序列化
str := `{"Name":"Tom","Age":23,"Email":"123@qq.com"}`
var p Person
json.Unmarshal([]byte(str), &p)
fmt.Printf("p: %v\n", p)
// p: {Tom 23 123@qq.com}
}
```
解析嵌套类型
```go
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Pets []string
}
func main() {
person := Person{
Name: "Tom",
Age: 23,
Pets: []string{"dog", "cat"},
}
// 序列化
b, _ := json.Marshal(person)
fmt.Printf("b: %v\n", string(b))
// b: {"Name":"Tom","Age":23,"Pets":["dog","cat"]}
// 反序列化
str := `{"Name":"Tom","Age":23,"Pets":["dog","cat"]}`
var p Person
json.Unmarshal([]byte(str), &p)
fmt.Printf("p: %v\n", p)
// p: {Tom 23 [dog cat]}
}
```
## 两个核心结构体
```go
// io流 Reader
type Decoder struct {}
// io流 Writer
type Encoder struct {}
```
从文件中读取
person.json
```json
{
"Name": "Tom",
"Age": 23,
"Pets": ["dog", "cat"]
}
```
```go
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
// 从文件中读取
f, _ := os.Open("person.json")
defer f.Close()
decoder := json.NewDecoder(f)
var m map[string]interface{}
decoder.Decode(&m)
fmt.Printf("m: %v\n", m)
// m: map[Age:23 Name:Tom Pets:[dog cat]]
}
```
写入文件
```go
package main
import (
"encoding/json"
"os"
)
type Person struct {
Name string
Age int
Pets []string
}
func main() {
person := Person{
Name: "Tom",
Age: 23,
Pets: []string{"dog", "cat"},
}
// 写入文件
f, _ := os.OpenFile("person.json", os.O_WRONLY|os.O_CREATE, 0777)
defer f.Close()
encoder := json.NewEncoder(f)
encoder.Encode(person)
}
```
输出结果 person.json
```json
{"Name":"Tom","Age":23,"Pets":["dog","cat"]}
```
\ No newline at end of file
# Golang标准库-xml
对xml解析
## 两个核心函数
```go
// struct 转 xml
func Marshal(v any) ([]byte, error) {}
// xml 转 struct
func Unmarshal(data []byte, v any) error {}
```
## 两个核心结构体
```go
// 从输入流读取并解析xml
type Decoder struct {}
// 将xml写入到输出流
type Encoder struct {}
```
序列化
```go
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
func main() {
person := Person{
Name: "Tom",
Age: 23,
Email: "123@qq.com",
}
b, _ := xml.Marshal(person)
fmt.Printf("b: %v\n", string(b))
// b: <person><name>Tom</name><age>23</age><email>123@qq.com</email></person>
// 带缩进格式
b2, _ := xml.MarshalIndent(person, " ", " ")
fmt.Printf("%v\n", string(b2))
// <person>
// <name>Tom</name>
// <age>23</age>
// <email>123@qq.com</email>
// </person>
}
```
反序列化
```go
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
func main() {
str := `
<person>
<name>Tom</name>
<age>23</age>
<email>123@qq.com</email>
</person>
`
b := []byte(str)
var person Person
xml.Unmarshal(b, &person)
fmt.Printf("person: %v\n", person)
// person: {{ person} Tom 23 123@qq.com}
}
```
## 读写xml文件
从文件读取
person.xml
```xml
<person>
<name>Tom</name>
<age>23</age>
<email>123@qq.com</email>
</person>
```
```go
package main
import (
"encoding/xml"
"fmt"
"os"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
func main() {
content, _ := os.ReadFile("person.xml")
b := []byte(content)
var person Person
xml.Unmarshal(b, &person)
fmt.Printf("person: %v\n", person)
// person: {{ person} Tom 23 123@qq.com}
}
```
写入到文件
```go
package main
import (
"encoding/xml"
"os"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
func main() {
person := Person{
Name: "Tom",
Age: 23,
Email: "123@qq.com",
}
f, _ := os.OpenFile("person.xml", os.O_WRONLY|os.O_CREATE, os.ModePerm)
defer f.Close()
encoder := xml.NewEncoder(f)
encoder.Encode(person)
}
```
输出结果 person.xml
```xml
<person><name>Tom</name><age>23</age><email>123@qq.com</email></person>
```
...@@ -70,9 +70,10 @@ ...@@ -70,9 +70,10 @@
- [Golang标准库-errors](/blog/golang/golang-standard-errors.md) - [Golang标准库-errors](/blog/golang/golang-standard-errors.md)
- [Golang标准库-sort](/blog/golang/golang-standard-sort.md) - [Golang标准库-sort](/blog/golang/golang-standard-sort.md)
- [Golang标准库-time](/blog/golang/golang-standard-time.md) - [Golang标准库-time](/blog/golang/golang-standard-time.md)
- [Golang标准库-json](/blog/golang/golang-standard-json.md)
- [Golang标准库-xml](/blog/golang/golang-standard-xml.md)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj/?p=98&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj/?p=96&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册