偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go 1.23引入的新Bug?其實(shí)只是文檔沒(méi)看仔細(xì)

開(kāi)發(fā) 前端
目前Ian Lance Taylor將該issue改名為“proposal: cmd/vet: warn about copying a time.Timer value”,即建議在vet中增加warning,但他也不保證該proposal能被accept,因?yàn)橐春罄m(xù)是否會(huì)受到很多類似的問(wèn)題報(bào)告。

上個(gè)月中旬,Go 1.23版本正式發(fā)布!這也是Russ Cox作為Go tech leader的最后一個(gè)發(fā)布版本,他本人在該版本中做出重要貢獻(xiàn),那就是解決了一直困擾Go團(tuán)隊(duì)的Timer/Ticker的GC回收問(wèn)題,進(jìn)而解決了Timer的Stop和Reset很難正確使用的問(wèn)題。

圖片

不過(guò),就在昨天,一個(gè)叫tulir的gopher提出的issue(ttps://github.com/golang/go/issues/69186)差點(diǎn)讓Russ Cox“晚節(jié)不?!?)。該issue提到,他寫(xiě)的一段使用了Timer的代碼在Go 1.22中工作正常,但在Go 1.23中就無(wú)法工作了,具體現(xiàn)象是:在linux上,整個(gè)程序hang住不動(dòng)了,而在macOS上,則直接引發(fā)panic異常退出:"fatal error: ts set in timer"。

隨即,Go101老貘兄“補(bǔ)上一刀”,給出了一個(gè)更為簡(jiǎn)潔的示例:

package main

import "time"

func main() {
 illegalTimerCopy := *time.NewTimer(time.Second)
 illegalTimerCopy.Stop() // block for ever
}

我也實(shí)測(cè)了該示例,在我的macOS上,用go1.23.0運(yùn)行,直接panic,即便使用GODEBUG=synctimerchan=1退回到Go 1.23以前的行為也不行。在centos 7.9(kernel 3.10)上跑,也發(fā)生了和issue一樣的現(xiàn)象:hang住不動(dòng)。

到這里,我也不得不認(rèn)為:這是go 1.23 Timer引入的新bug!但真相果真如此嗎?

幾個(gè)小時(shí)后,Go大神Ian Lance Taylor現(xiàn)身說(shuō)法了。他居然表示對(duì)Go 1.23之前的版本依然可以正確運(yùn)行上述代碼表示“驚訝”。

圖片圖片

之后,他表示從Go 1.4版本開(kāi)始,Go標(biāo)準(zhǔn)庫(kù)文檔(#8776)就對(duì)Timer類型的使用做出了限制:"A Timer must be created with NewTimer or AfterFunc.",即Timer只能使用NewTimer和AfterFunc創(chuàng)建。

圖片圖片

而像上述代碼中的對(duì)Timer實(shí)例的Copy的行為則是未定義的。

圖片圖片

目前Ian Lance Taylor將該issue改名為“proposal: cmd/vet: warn about copying a time.Timer value”,即建議在vet中增加warning,但他也不保證該proposal能被accept,因?yàn)橐春罄m(xù)是否會(huì)受到很多類似的問(wèn)題報(bào)告。

蓋棺定論了,原來(lái)是我們的文檔看的還不夠仔細(xì):)。

不過(guò),即便go vet不增加對(duì)Timer copy的warning,我也想建議官方修改一下Timer的doc描述,再直白一些,就像對(duì)sync.Mutex那樣:A Mutex must not be copied after first use.

圖片圖片

在Timer文檔中,也補(bǔ)充依據(jù):A Timer must not be copied after being created.

你說(shuō)呢?

責(zé)任編輯:武曉燕 來(lái)源: TonyBai
相關(guān)推薦

2011-09-05 11:04:25

Ubuntu 11.1LightDM

2010-01-22 09:52:32

JPA 2.0Java EE 6

2024-09-02 00:30:41

Go語(yǔ)言場(chǎng)景

2021-12-09 08:50:35

Kubernetes增強(qiáng)功能版本更新

2009-12-07 10:40:24

.NET 4.0

2015-03-18 14:02:25

生物識(shí)別認(rèn)證Windows10

2009-04-27 12:26:45

AMD單核Nehalem

2022-02-11 21:01:18

GoNetip網(wǎng)絡(luò)庫(kù)

2023-03-20 21:44:10

微軟GPT-4AI

2015-11-12 10:56:13

2025-05-06 05:00:00

2025-05-06 08:00:35

2022-08-19 10:27:39

系統(tǒng)模型

2021-07-24 13:20:40

iOS應(yīng)用系統(tǒng)

2022-01-24 16:06:58

Linux 5.17RTLA工具

2024-09-09 08:56:03

2015-02-04 10:49:13

Visual C++C++Windows API

2024-06-24 08:10:34

Java8表達(dá)式IDE

2024-08-07 08:51:20

Go優(yōu)化開(kāi)發(fā)

2024-05-08 08:56:09

GreatSQL內(nèi)存宏定義
點(diǎn)贊
收藏

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