Go 监听信号退出并回收资源

为什么取这个名字,而不是直接写优雅退出呢?

实际上我一直觉得优雅退出这个名字并不直观,而优雅退出的本质,其实就是监听一些操作系统信号。在监听到退出信号的时候,可以做一些资源回收的操作,而不至于什么都不管直接退出,等到操作系统自己去处理回收这些资源。

Read More

结构体与json相互转换,map与json相互转换

一.结构体转json,使用json.Marshal()返回值([]byte, error)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import (
"encoding/json"
"fmt"
)

type Student struct {
Name string
Age int
Gender byte
Subject []string
}

func main() {
s := Student{
"XiaoMing",
15,
'M',
[]string{"数学","语文","英语"},
}
sJson,err := json.Marshal(s)
if err!=nil{
fmt.Println(err)
return
}
fmt.Println("json of s = ",string(sJson))
}

Read More

time(时间)包使用

1.获取时间

1.1 当前时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
unix := time.Now().Unix()
fmt.Printf("当前时间戳(单位秒): %v \n",unix)
nano := time.Now().UnixNano()
fmt.Printf("当前时间戳(单位纳秒): %v\n",nano)
format := time.Now().Format("2006-01-02 15:04:05")
fmt.Printf("当前时间(Y-m-d H:i:s): %v\n",format)
format2 := time.Now().Format("20060102150405")
fmt.Printf("当前时间(YmdHis): %v\n",format2)
/**
当前时间戳(单位秒): 1616251448
当前时间戳(单位纳秒): 1616251448041163000
当前时间(Y-m-d H:i:s): 2021-03-20 22:44:08
当前时间(YmdHis): 20210320224408
*/

Read More

在 Docker中使用Laravel schedule

在 Docker 中部署 Laravel 应用,难免会用到 Laravel 本身的任务调度系统 (Schedule),而 Schedule 需要用到 cron,在 Docker 中使用 cron,有以下三种方案:

  • 使用独立的 cron 容器。❎ 如果有多个不同的容器应用需要依赖 cron 时,那么这是一种很完美的解决方案,但是我们只用到 Laravel 的任务调度,因此独立的 cron 容器显得多余,所以不能采用此方案。

  • 直接使用宿主机的 cron。❎ 如果直接使用宿主机的 cron,那么「定时任务」这个功能就不属于容器的一部分了。以后在应用迁移与快速部署时,cron 需要单独配置,这违背了我们使用 Docker 的初衷,我们的初衷是希望用 docker-compose up 这一个命令就能快速构建出一个线上应用。并且,在宿主机上使用 cron,使用 Laravel schedule 任务调度时不能和 MySQL 或 Redis 进行通信,所以这个方案需要被否决。

  • 在 PHP 容器中设置 cron。✅ 这才是最佳解决方案。Laravel 只需要在 cron 中配置一个 Laravel Task Scheduler,使用此容器中的 PHP 执行文件可以直接执行 Laravel 的任务调度。

Read More