Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
b95fedf6
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b95fedf6
编写于
10月 10, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
a8893615
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
363 addition
and
2 deletion
+363
-2
blog/golang/golang-standard-json.md
blog/golang/golang-standard-json.md
+182
-0
blog/golang/golang-standard-xml.md
blog/golang/golang-standard-xml.md
+178
-0
blog/golang/index.md
blog/golang/index.md
+3
-2
未找到文件。
blog/golang/golang-standard-json.md
0 → 100644
浏览文件 @
b95fedf6
# 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
blog/golang/golang-standard-xml.md
0 → 100644
浏览文件 @
b95fedf6
# 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>
```
blog/golang/index.md
浏览文件 @
b95fedf6
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录