【GO学习】6.22学习

81 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情 

本文主要关于GO语言的JSON处理和时间处理

JSON(JavaScript Object Notation)处理

JSON简介:

一种数据格式,用于在客户端与服务器之间进行数据交换,是一种比XML更轻量级的数据交换格式,适用于各种语言,各种平台(Windows,Linux等)。表现为键/值对集合的文本描述形式

可以用JSON传输简单的字符串,数字,布尔值,也可以传输一个数组,或者更复杂的复合结构。在Web开发领域中,广泛应用于Web服务端程序和客户端程序之间的数据通信 GO支持JOSN,有内置标准库

生成JSON(编码)

1) 根据结构体的内容创建JSON

具体方法如下;先创建结构体并初始化 然后调用函数用结构体的内容生成JSON 最后执行其他操作

代码14,15



package main

import (
   "encoding/json" //加进包
   "fmt"
)

//用结构体创建JSON时,成员名首字母必须大写
type IT struct {
   Company  string
   Subjects []string //切片类型
   Isok     bool
   Price    float64
}

func main() {
   //定义一个结构体变量 同时初始化
   s := IT{"itcsat", []string{"GO", "C++", "Python"}, true, 666.66}
   //编码,根据结构体内容生成JSON文本
   //buf, err := json.Marshal(s) //调用库函数生成JSON 这种方法打印出的内容均在一行
   buf, err := json.MarshalIndent(s, "", " ") //格式化编码 还原原本的格式 分别表示空格和缩进
   if err != nil {
      fmt.Println("err=", err)
      return
   }
   //fmt.Println("buf=", buf) 若直接打印buf会出现一串ASCII值 所以需要用string.(buf)打印成字符串
   fmt.Println("buf=", string(buf))

}

注:

/*JSON中关于首字母大小写的修改 只能在定义的后面修改
type IT struct {
   Company  string 'json:"company"'//把首字母变成小写 'json:"-"'表示该字段不会打印到屏幕
   Subjects []string 'json:"subjects"'
   Isok     bool //'json:",bool"'可把他打印成字符串到屏幕
   Price    float64
}
*/

2) 根据map生成JSON

创建一个map并初始化  然后调用函数用结构体的内容生成JSON 最后执行其他操作

 




package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   m := make(map[string]interface{}, 4)//空接口
   m["company"] = "itcast"
   m["subjects"] = []string{"GO", "C", "Python"}
   m["isok"] = true
   m["price"] = 666.66

   result, err := json.MarshalIndent(m, "", " ")
   if err != nil {
      fmt.Println("err=", err)
      return
   }
   //fmt.Println("buf=", buf) 若直接打印buf会出现一串ASCII值 所以需要用string.(buf)打印成字符串
   fmt.Println("result=", string(result))

}

 

解析JSON(解码)

1) 解析到结构体

 

2) 解析到map

 

有四个字段 就把MAP的长度设为4
//解析到m 故最后打印的是m
// 无法强制将JSON里的内容进行相应类型的转换 ->类型断言 先把每个字段的内容取出来 再遍历
//类型断言是值,它是value类型 搭配switch case使用  先把数据反馈给它相应的类型 再存储打印
//例子中的切片类型不是string类型 而是空切片interface{}类型
//与解析到结构体的区别是 若要实实在在知道数据是何种类型 还需要用类型断言逐个反馈

 

时间处理

常用函数time.now 快速获取当前时间 也可以用time.Date快速构造一串带时序的时间 再通过其它函数操作获取不同值 详见:

Go时间处理汇总_寻找09之夏的博客-CSDN博客_go 时间