自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

大家好,我是煎魚。

Go 語言中有一個東西是比較有特色的,那就是 time 標(biāo)準(zhǔn)庫,在各類與時間有關(guān)的場景都會常常用到,例如:定時/延遲任務(wù)、數(shù)據(jù)更新、時間比較。

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

import "time"

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

輸出結(jié)果:

1000000000

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

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

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

輸出結(jié)果:

2009-11-10 23:00:00

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

為什么是這個時間點

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

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

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

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

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

確實背不下來,快優(yōu)化

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

現(xiàn)實是很殘酷的,母語不同,業(yè)務(wù)類型不同,不會經(jīng)常用到 time 標(biāo)準(zhǔn)庫,很容易忘記具體數(shù)值。

大佬也分析了 Go modules 上的所有模塊代碼,發(fā)現(xiàn)這個日期時間點,使用的次數(shù)非常高頻:

排名

頻率

格式

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

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

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

新版本中直接引用即可。

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

支持比較:Time.Compare

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

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

函數(shù)返回如下幾種結(jié)果:

  • 如果 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
}

函數(shù)內(nèi)部比較簡單。

總結(jié)

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

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

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

責(zé)任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2021-08-08 22:04:15

Go時間格式化

2022-11-28 08:47:43

RobGo格式

2023-02-26 22:47:45

Go管理內(nèi)存

2023-03-02 09:07:44

2023-02-06 08:51:30

PGO編譯速度

2021-12-13 20:09:33

GoElasticsearJava

2021-12-16 16:20:57

GoWebSocketLinux

2022-12-14 09:13:37

Go程序規(guī)范

2010-09-09 15:23:16

SQL更新數(shù)據(jù)

2011-09-20 15:19:15

Python

2023-11-02 08:43:08

protocgo兼容

2012-02-13 09:38:20

諾基亞SymbianMWC

2022-12-09 08:52:51

Go匿名接口

2023-04-21 18:48:18

谷歌人工智能開源

2023-10-04 20:03:46

GOkeyvalue

2024-01-17 12:06:52

AI論文

2024-02-22 08:19:41

Go迭代循環(huán)

2022-07-01 06:44:42

微信應(yīng)用偽裝應(yīng)用轉(zhuǎn)生

2025-03-12 00:22:00

2021-08-26 22:53:00

iOS蘋果系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號