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

Go 大佬良心發(fā)現(xiàn),愿意給 Map 加清除了?

開發(fā) 前端
在計算機科學(xué)中,有一個神奇的值,叫做:NaN(Not a Number,非數(shù))。它是數(shù)值數(shù)據(jù)類型的一類值,表示未定義或不可表示的值。常在浮點數(shù)運算中使用。首次引入 NaN 的是 1985 年的 IEEE 754 浮點數(shù)標(biāo)準(zhǔn)。

大家好,我是煎魚。

一個東西來來回回的討論,關(guān)了又開,關(guān)了后建新的,新的被 ban 了,又發(fā)現(xiàn)新的論據(jù),再打開新的。這在職場工作中很常見,在 Go 的提案討論中,也出現(xiàn)了...

今天要分享的是 Go map 在 NaN 上的一個爭議和可能即將出現(xiàn)的 API 增加。

背景和考題

NaN 是什么

在計算機科學(xué)中,有一個神奇的值,叫做:NaN(Not a Number,非數(shù))。它是數(shù)值數(shù)據(jù)類型的一類值,表示未定義或不可表示的值。常在浮點數(shù)運算中使用。首次引入 NaN 的是 1985 年的 IEEE 754 浮點數(shù)標(biāo)準(zhǔn)。

在與 NaN 值的存儲和比較時,會有問題。因為判斷一個值是否為 NaN 時,不能通過判斷 x=NaN 或 x≠NaN 來進行比較。但因為 NaN 永遠不等于其自身,因此可通過判斷 x=x 或 x≠x 來判斷 x 是否為 NaN 值,將會分別返回 False 和 True。

當(dāng) NaN 與另一個浮點數(shù) x(其中 x 可為正常值、正負(fù)無窮大或 NaN)進行比較時,比較結(jié)果如下:

比較

結(jié)果

NaN ≥ x

False

NaN ≤ x

False

NaN > x

False

NaN < x

False

NaN = x

False

NaN ≠ x

True

這里的理解對于下面的考題很重要。

Go IEEE-754 考題

在 Go101 上看到一道關(guān)于 IEEE-754 浮點數(shù)的題,我這里引用題目,以下代碼輸出什么?

如下代碼:

package main

import "math"

func main() {
a, b, c := 2.0, 1.0, 0.0
x, y := a/c, b/c // infinity
n := math.NaN() // not a number
m := math.Sqrt(-1.0) // not a number
println(x == y, m == n)
}
  • A:true true。
  • B:true false。
  • C:false false。
  • D:false true。

答案是啥?是 A 嗎,還是 D?

對上述程序進行解析,變量 x,y 是 +Inf 正無窮。m,n 是 NaN 無窮值。

正確的答案是:B。

你答對了嗎?

提案

在對 NaN 有了基本的了解后,我們可以正式進入主題了。在 Go map 關(guān)聯(lián)提案中,常提到新增 API,用于滿足清空 map 的訴求:

圖片

但在多次討論中,Go 官方團隊給出的解決方案是:

for k := range m {
delete(m, k)
}

并關(guān)閉了相關(guān)的提案,結(jié)束了這個議題。留下滿臉 ”好吧,這都行“ 的疑惑打工人的我們,這是這類提案的背景。

但這塊有一個坑,在包含任何 NaN 鍵值時,將無法通過循環(huán) delete 的方式清空 map。一旦你 map 有 NaN,但你又 for+delete,以為刪掉了,其實并沒有,就會產(chǎn)生類似泄露的效果。

因此 Go 團隊的靈魂人物 Russ Cox,重新發(fā)起了新提案《proposal: spec: add delete(m) to clear map[1]》。如下圖:

圖片

希望借此來解決 map 在 NaN 的問題,并同時完成一直以來討論的 map 清空/重置/清理等社區(qū)訴求。

也就是新增,如下特性:

delete(m)

支持清除 map 的功能(即使包含 NaN)。

總結(jié)

針對這個提案也有幾種聲音,分別是萬惡的命名,對叫 delete,還是叫 clear 都有著不同的見解。

// Clear removes all entries from m, leaving it empty.
func Clear[M ~map[K]V, K comparable, V any](m M "M ~map[K]V, K comparable, V any")

delete(m)

也有聲音提到不允許引入 NaN 值,但顯然。在 Go1 已經(jīng)很難了,因為 NaN 已經(jīng)被允許引入,球已經(jīng)在鍋里了。

圖片

對于 map 新增 API 用于清空/重置/清除的作用,你怎么看呢?還是說你也更喜歡對 NaN 單獨的處理?例如 panic?

參考資料

[1]proposal: spec: add delete(m) to clear map: https://github.com/golang/go/issues/56351

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

2016-09-09 13:30:18

2021-04-26 10:06:39

顯卡電商整機

2025-02-05 09:23:35

人工智能AI聊天機器人

2020-10-14 15:37:04

Goconsul接口

2022-10-10 11:37:14

Gomap內(nèi)存

2020-04-07 16:21:38

疫情科技企業(yè)

2023-05-19 08:01:57

Go 語言map

2023-10-30 08:49:23

Go提案離職

2022-07-26 09:48:55

微服務(wù)服務(wù)AKF

2023-11-30 08:09:02

Go語言

2012-05-24 09:18:40

云計算

2018-11-22 15:07:17

代碼github程序

2018-12-05 14:29:22

2024-06-26 09:41:36

Go代碼開發(fā)者

2011-08-02 15:42:14

PythonMySQL

2012-06-15 09:56:40

2023-05-15 08:01:16

Go語言

2023-11-21 15:46:13

Go內(nèi)存泄漏

2021-07-08 23:53:44

Go語言拷貝

2021-04-16 10:31:41

FBI漏洞黑客
點贊
收藏

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

主站蜘蛛池模板: 精品中文视频 | 国产剧情一区 | 请别相信他免费喜剧电影在线观看 | 国产精品视频一区二区三区 | 亚洲精品久久久久久国产精华液 | h视频免费在线观看 | 国产成人免费视频网站高清观看视频 | 999久久久久久久久6666 | 91视频国产一区 | 国产一区二区三区高清 | 欧美大片久久久 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲精品乱码久久久久久蜜桃91 | 中文字幕亚洲视频 | 天天综合网永久 | 国产一区二区视频在线 | a级片在线观看 | 午夜小视频免费观看 | 日韩午夜精品 | 美女在线视频一区二区三区 | 天天操网| 超碰在线播 | 日韩免费视频 | 91免费入口 | 久久久久久久一区二区三区 | 网黄在线 | 丁香六月激情 | 成人福利视频 | 精品国产一区二区三区久久狼黑人 | 一区二区国产在线观看 | 999久久久| 日韩午夜电影在线观看 | 国产午夜视频 | 久久久91精品国产一区二区三区 | 亚洲免费福利视频 | 国产亚洲精品久久久优势 | 麻豆av免费观看 | 成人免费看片又大又黄 | 欧美一区二区网站 | 99在线资源 | 99re视频在线观看 |