当前位置: 首页 > article >正文

GO 语言进阶之 时间处理和Json 处理

更多个人笔记见:
github个人笔记仓库
gitee 个人笔记仓库
个人学习,学习过程中还会不断补充~ (后续会更新在github上)

文章目录

  • 时间处理
    • 基本例子
  • Json处理
    • 基础案例

时间处理

时间格式化必须使用:2006-01-02 15:04:05 这个时间为参考!!

基本例子

包括常见的时间操作

package mainimport ("fmt""time"
)func main() {// 1. 获取当前时间now := time.Now()fmt.Printf("当前时间: %v\n", now)//当前时间: 2025-05-25 20:14:42.296858 +0800 CST m=+0.000238334// 2. 获取时间组成部分fmt.Printf("年: %d 月: %d 日: %d 时: %d 分: %d 秒: %d\n",now.Year(), now.Month(), now.Day(),now.Hour(), now.Minute(), now.Second())// 3. 格式化时间输出fmt.Println("标准格式:", now.Format("2006-01-02 15:04:05"))fmt.Println("简写格式:", now.Format("2006/01/02"))  fmt.Println("时间戳:", now.Unix())//标准格式: 2025-05-25 20:14:42//简写格式: 2025/05/25//时间戳: 1748175282// 4. 时间计算oneHourLater := now.Add(time.Hour)fmt.Println("1小时后:", oneHourLater)//1小时后: 2025-05-25 21:14:42.296858 +0800 CST m=+3600.000238334tomorrow := now.AddDate(0, 0, 1)fmt.Println("明天:", tomorrow.Format("2006-01-02"))//明天: 2025-05-26// 5. 时间比较if now.Before(oneHourLater) { //比较前后时间fmt.Println("当前时间在1小时前")}// 6. 定时器timer := time.NewTimer(2 * time.Second)  //NewTimer 创建定时器<-timer.C //阻塞等待定时器fmt.Println("2秒时间到") // 7. 定时任务ticker := time.NewTicker(1 * time.Second)go func() {for t := range ticker.C {fmt.Println("定时执行:", t.Format("15:04:05"))}}()// 8. 解析字符串为时间 !! timeStr := "2023-01-02 15:04:05" //先以字符串的标准形式表示parsedTime, err := time.Parse("2006-01-02 15:04:05", timeStr)if err != nil {panic(err)}fmt.Println("解析后的时间:", parsedTime)//解析后的时间: 2023-01-02 15:04:05 +0000 UTC// 9. 睡眠  ->  为了完成 7 定时任务time.Sleep(5 * time.Second)ticker.Stop()fmt.Println("程序结束")
}

Json处理

Json化后方便网络通信等传输,主要特点其实就是对第一个字母进行处理

基础案例

type userInfo struct {Name  string   `json:"Name"`Age   int      `json:"age"`Hobby []string `json:"Hobby"`
}func main() {a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}// 普通JSON编码buf, err := json.Marshal(a)if err != nil {panic(err)}fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}// 带缩进的JSON编码indentBuf, err := json.MarshalIndent(a, "", "\t")if err != nil {panic(err)}fmt.Println(string(indentBuf)) //如果不是 string 会以数字形式输出/*{"Name": "wang","age": 18,"Hobby": ["Golang","TypeScript"]}*/// JSON解码var b userInfoerr = json.Unmarshal(buf, &b) //解码然后放入 b 中if err != nil {panic(err)}fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
  • 似乎在定义结构体的 json 的时候出一些错误都是可以被 Unmarshal 正确重新放回去的(不过 Marshal 的时候就会带有一点错误地放入)
    还是老实定义 json 就好
  • 记住需要编为 json 后,string 来输出,不然就是一串数字
http://www.lryc.cn/news/2386303.html

相关文章:

  • 对WireShark 中的UDP抓包数据进行解析
  • Flannel后端为UDP模式下,分析数据包的发送方式(二)
  • 从 0 到 1:Spring Boot 与 Spring AI 深度实战(基于深度求索 DeepSeek)
  • upload-labs通关笔记-第20关 文件上传之杠点绕过
  • Vscode +Keil Assistant编译报错处理
  • 记录python在excel中添加一列新的列
  • WebRTC:实时通信的未来之路
  • 探索产品经理的MVP:从概念到实践
  • 用python实现中国象棋
  • GO 语言基础3 struct 结构体
  • VSCode C/C++ 开发环境完整配置及一些扩展用途(自用)update:2025/3/31
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
  • a16z:AI带来了全新的9种开发软件的模式
  • 20.迭代器模式:思考与解读
  • Java 学习笔记:注解、泛型与 IO 流
  • 在 Excel 使用macro————仙盟创梦IDE
  • 【MySQL】08.视图
  • 鸿蒙devEco studio如何创建模拟器
  • 鸿蒙路由参数传递
  • springboot 控制层调用业务逻辑层,注入报错,无法自动装配 解决办法
  • MySQL:11_事务
  • Linux中的文件系统和软硬连接
  • 并发容器(Collections)
  • SPA模式下的es6如何加快宿主页的显示速度
  • windows powershell 判断 进程号是否存在
  • c# 解码 encodeURIComponent
  • Spring AI:Java开发者的AI开发新利器
  • Android System UI 深度解析:从架构演进到车载 / TV 场景的全维度定制
  • Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战