成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go1.20 中兩個關于 Time 的更新,終于不用背 2006-01-02 15:04:05 了!

開發 前端
Go Time 一直都是話題榜上的老面孔。這一次在 Go1.20 的新特性中,對 2006-01-02 15:04:05 常用的時間點進行了常量聲明,便于我們后續直接引用,不用 “死記硬背”。

大家好,我是煎魚。

Go 語言中有一個東西是比較有特色的,那就是 time 標準庫,在各類與時間有關的場景都會常常用到,例如:定時/延遲任務、數據更新、時間比較。

官方 Demo 是一個計算時間差的樣例:

import "time"

func main() {
start := time.Now()
time.Sleep(time.Second)
t := time.Now()
elapsed := t.Sub(start)
println(elapsed)
}

輸出結果:

1000000000

神秘的 2006-01-02 15:04:05

在社區反饋中,更虎的是以下這個樣例:

func main() {
now := time.Now()
v := now.Format("2006-01-02 15:04:05")
println(v)
}

輸出結果:

2009-11-10 23:00:00

這時候大家會遇到幾個問題...最被常問的是 2006-01-02 15:04:05,這是隨便寫的時間點嗎,甚至還曾經有傳言說這是 Go 語言的誕生時間...

為什么是這個時間點

實際上 2006-01-02 15:04:05 是一個參考時間的格式,也就是其它語言中 Y-m-d H:i:s 格式,在功能上用于時間的格式化處理和規范。

那為什么是 2006-01-02 15:04:05 呢?其實這些 ”數字“ 是有意義的,每個布局字符串都是一個時間戳的表示,并非隨便寫的時間點。

可參見官方例子中的如下方式:

Jan 2 15:04:05 2006 MST
1 2 3 4 5 6 -7

我們也可以將其記憶為 2006 年 1 月 2 日 3 點 4 分 5 秒。

確實背不下來,快優化

雖然 Go 官方給出了一系列感覺很合理的解釋,也通過上面的方式試圖教會大家靠理解而不是靠純背把這個時間點格式規范給記下來...

現實是很殘酷的,母語不同,業務類型不同,不會經常用到 time 標準庫,很容易忘記具體數值。

大佬也分析了 Go modules 上的所有模塊代碼,發現這個日期時間點,使用的次數非常高頻:

排名

頻率

格式

1

75616

time.RFC3339

2

23954

time.RFC3339Nano

3

13312

"2006-01-02 15:04:05"

4

12332

"2006-01-02"

5

11940

time.RFC1123

綜上數據所述,終于在 Go 過去了 13 年后,將會在 Go1.20 增加如下三個常量:

DateTime   = "2006-01-02 15:04:05"
DateOnly = "2006-01-02"
TimeOnly = "15:04:05"

新版本中直接引用即可。

以后問這是什么意思的同學,可能會變少。

支持比較:Time.Compare

目前在標準庫中,有 3 個方法來比較 time.Time 對象,分別是:Before()、Equal() 和 After(),作用上類似 <、== 和 >。但缺少 <= 和 >= 的等價物,因此在程序中實施起來會比較麻煩。

經常一番討論,將會在 Go1.20 支持 Time.Compare,以此來達到類似的效果。作用是將 Time 對象 t 和 u 兩者進行比較。

函數返回如下幾種結果:

  • 如果 t 在 u 之前,則返回 -1。
  • 如果 t 在 u 之后,則返回 +1。
  • 如果它們相同,則返回 0。

源代碼如下:

func (t Time) Compare(u Time) int {
var tc, uc int64
if t.wall&u.wall&hasMonotonic != 0 {
tc, uc = t.ext, u.ext
} else {
tc, uc = t.sec(), u.sec()
if tc == uc {
tc, uc = int64(t.nsec()), int64(u.nsec())
}
}
switch {
case tc < uc:
return -1
case tc > uc:
return +1
}
return 0
}

函數內部比較簡單。

總結

Go Time 一直都是話題榜上的老面孔。這一次在 Go1.20 的新特性中,對 2006-01-02 15:04:05 常用的時間點進行了常量聲明,便于我們后續直接引用,不用 “死記硬背”。

在 Time 對象的比較上,也補全了 Compare 方法,便于兩個時間對象之前之后的對比。

Go1.20 將在明年 2023 年 2,3 月份左右就可以見到了。11 月底會發預覽版本。沖不?

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2021-08-08 22:04:15

Go時間格式化

2022-11-28 08:47:43

RobGo格式

2023-02-26 22:47:45

Go管理內存

2023-03-02 09:07:44

2023-02-06 08:51:30

PGO編譯速度

2021-12-13 20:09:33

GoElasticsearJava

2022-12-14 09:13:37

Go程序規范

2021-12-16 16:20:57

GoWebSocketLinux

2023-11-02 08:43:08

protocgo兼容

2010-09-09 15:23:16

SQL更新數據

2011-09-20 15:19:15

Python

2022-12-09 08:52:51

Go匿名接口

2012-02-13 09:38:20

諾基亞SymbianMWC

2023-04-21 18:48:18

谷歌人工智能開源

2023-10-04 20:03:46

GOkeyvalue

2024-01-17 12:06:52

AI論文

2025-03-12 00:22:00

2024-02-22 08:19:41

Go迭代循環

2021-08-26 22:53:00

iOS蘋果系統

2022-07-01 06:44:42

微信應用偽裝應用轉生
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人深夜福利在线观看 | av免费观看在线 | 日本一二区视频 | 久久精品中文字幕 | 国产视频二区在线观看 | 国产亚洲精品久久午夜玫瑰园 | 日韩精品一二三 | 国产一区高清 | 国产四区 | 午夜激情视频在线 | 欧美在线视频网 | 精品国产一区二区三区久久久久久 | 美日韩一区二区 | 国产精品1区2区 | 久久婷婷国产香蕉 | 中文字幕亚洲欧美日韩在线不卡 | 黄色视频a级毛片 | 欧美精品三区 | 蜜月aⅴ国产精品 | 九九av| 狠狠ri| 国产免费一区二区 | 天天想天天干 | 国产成人精品区一区二区不卡 | 91大神在线看 | 精品国产一二三区 | 久久久久久久国产 | 国产成人精品一区 | 精品久久一区 | 国产精品99| 日本一区二区高清不卡 | 久久精品亚洲成在人线av网址 | 一区二区三区国产好的精 | 羞羞视频在线观免费观看 | 三级高清 | 国产在线拍偷自揄拍视频 | 99久久亚洲 | 99re在线视频精品 | 久久69精品久久久久久久电影好 | 国产精品黄色 | www.99精品|