Go的网络操作
库——io/ioutil
ioutil.ReadAll
pageBytes, err := ioutil.ReadAll(resp.Body)
库——net/http
resp.Body.Close()
- 一般在go对请求http之后,都要进行这个语句
- 这个语句主要用于确定body是否被清理干净,只要没有清理干净就会被重新连接,容易导致内存泄漏
库——encoding/json
- json是用于前后端数据交互的交换格式。
- 任意一端将数据转换成json字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等
json.Marshal
- 将数据编码成json字符串
type Stu struct {
Name string `json:"name"`
Age int
HIgh bool
sex string
Class *Class `json:"class"`
}
type Class struct {
Name string
Grade int
}
func main() {
//实例化一个数据结构,用于生成json字符串
stu := Stu{
Name: "张三",
Age: 18,
HIgh: true,
sex: "男",
}
//指针变量
cla := new(Class)
cla.Name = "1班"
cla.Grade = 3
stu.Class=cla
//Marshal失败时err!=nil
jsonStu, err := json.Marshal(stu)
if err != nil {
fmt.Println("生成json字符串错误")
}
//jsonStu是[]byte类型,转化成string类型便于查看
fmt.Println(string(jsonStu))
}
或
type Stu struct {
Name interface{} `json:"name"`
Age interface{}
HIgh interface{}
sex interface{}
Class interface{} `json:"class"`
}
type Class struct {
Name string
Grade int
}
func main() {
//与前面的例子一样
......
}
结果:{"name":"张三","Age":18,"HIgh":true,"class":{"Name":"1班","Grade":3}}
- 如果一开始旁边没有打上json的标签,下面的取变量名作为key,否则就用标签作为key
- 下面用interface{}就能接受任意变量类型
json.Unmarsahl
将json串解码