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

Go 未來方向:標(biāo)準(zhǔn)庫 v2 改進(jìn)的指導(dǎo)原則

開發(fā) 前端
通過閱讀本文的標(biāo)準(zhǔn)庫 v2 的設(shè)計(jì)講解,能夠感受到其實(shí) @Russ Cox 已經(jīng)對(duì) Go 兼容性這塊做好了規(guī)劃?;臼窍葎?dòng) Go1 兼容性前后保障的準(zhǔn)則,再動(dòng)標(biāo)準(zhǔn)庫。同時(shí)標(biāo)準(zhǔn)庫 v2 要兼容 v1 的使用,不能直接就是完全不維護(hù)了。

大家好,我是煎魚。

在五一假期的第一天,Go 核心團(tuán)隊(duì)也沒有閑著,@Russ Cox 直接在官方博客發(fā)布了《Evolving the Go Standard Library with math/rand/v2》這篇文章。

圖片圖片

其部分內(nèi)容是對(duì)本次做 math/rand/v2 標(biāo)準(zhǔn)庫升級(jí)的內(nèi)容進(jìn)行再度陳述,有興趣的小伙伴可以閱讀我之前寫的《Go1.22 新特性:新的 math/rand/v2 庫,更快更標(biāo)準(zhǔn)!》,能夠知悉全貌。

本文的重點(diǎn)是對(duì)另外的 Go 標(biāo)準(zhǔn)庫 v2 的指導(dǎo)思想和規(guī)劃進(jìn)行分享。

之前:標(biāo)準(zhǔn)庫 v1 問題

自 Go1 在 2012 年 3 月發(fā)布以來,對(duì)標(biāo)準(zhǔn)庫的修改一直受到 Go1 的兼容性承諾的約束。

圖片圖片

總體而言,Go1 兼容性保障對(duì) Go 用戶來說是一個(gè)福音,它為生產(chǎn)系統(tǒng)、文檔、教程、書籍等提供了一個(gè)穩(wěn)定的基石。

然而隨著時(shí)間的推移,Go 核心團(tuán)隊(duì)意識(shí)和發(fā)現(xiàn)原始 API 中,存在著許多錯(cuò)誤無法以兼容的方式修復(fù)。

包括在其他場景下,Go 的最佳實(shí)踐和約定已經(jīng)發(fā)生了變化。我們需要一個(gè)可推進(jìn)的計(jì)劃來做出重要的、破壞性的變更。

為此,Go 1.22 新增的 math/rand/v2 包,這是標(biāo)準(zhǔn)庫中的第一個(gè) “v2” 包。它為 math/rand API 帶來了必要的改進(jìn)。

更重要的是:它為我們?nèi)绾胃鶕?jù)需要修訂其他標(biāo)準(zhǔn)庫包樹立了榜樣。

未來:標(biāo)準(zhǔn)庫 v2 演進(jìn)原則

基本準(zhǔn)則

這項(xiàng)工作的目標(biāo)之一是:為標(biāo)準(zhǔn)庫中所有 v2 包的處理方式建立原則和模式。

在接下來的幾個(gè) Go 版本中,Go 核心團(tuán)隊(duì)承諾不會(huì)有大量的 v2 包涌現(xiàn)。相反,他們將每一次只處理一個(gè)包,提高設(shè)計(jì)質(zhì)量。

確保新的標(biāo)準(zhǔn)庫 v2 設(shè)定的質(zhì)量標(biāo)準(zhǔn)能夠持續(xù)十年。(可能有許多包根本不需要 v2)

三個(gè)設(shè)計(jì)原則

對(duì)于那些確實(shí)需要 v2 版本的包,我們將會(huì)歸結(jié)為三個(gè)設(shè)計(jì)原則去實(shí)施。

具體如下:

1、不兼容的新版本軟件包將使用 /package/v2 作為導(dǎo)入路徑:就像標(biāo)準(zhǔn)庫之外的 v2 模塊一樣遵循語義導(dǎo)入版本化。這樣原始軟件包 v1 和 v2 軟件包就可以在一個(gè)程序中共存,這對(duì)于逐步轉(zhuǎn)換到新的應(yīng)用程序接口至關(guān)重要。

2、所有更改都必須以尊重現(xiàn)有用法和用戶為基礎(chǔ):我們絕不能引入不必要的變化,無論是對(duì)現(xiàn)有軟件包的不必要更改,還是必須學(xué)習(xí)的全新軟件包。在實(shí)踐中,這意味著我們要以現(xiàn)有軟件包為起點(diǎn),只對(duì)動(dòng)機(jī)明確、價(jià)值合理的軟件包進(jìn)行修改。

3、v2 標(biāo)準(zhǔn)庫不能把 v1 用戶拋在后面,完全不管了。在理想情況下,v2 軟件包應(yīng)能做 v1 軟件包能做的一切事情,而當(dāng) v2 發(fā)布時(shí),v1 軟件包應(yīng)被重寫為 v2 的薄封裝。這將確保現(xiàn)有的 v1 軟件包繼續(xù)受益于 v2 中的錯(cuò)誤修復(fù)和性能優(yōu)化,也保證了 v1 的兼容性。

意外考量

相較于 v1, v2 的包將會(huì)引入破壞性的變化,想讓 v1 被重寫為 v2 的薄封裝,并不總是可行的,在設(shè)計(jì)上這始終是需要慎重考慮的。

像是本次新增的 math/rand/v2,我們將 rand 中 auto-seeded v1 函數(shù)調(diào)用 v2 生成器,但由于重復(fù)性違規(guī),我們無法共享其他代碼。最終,math/rand 改動(dòng)的代碼量并不大,也不需要定期維護(hù),因此重復(fù)是可控的。

在其他情況下,為避免重復(fù)做更多的工作可能是值得的。例如:在 encoding/json/v2 的設(shè)計(jì)(仍在進(jìn)行)中,雖然默認(rèn)語義和 API 都發(fā)生了變化,但軟件包提供的配置項(xiàng)可以實(shí)現(xiàn) v1 API。

當(dāng)我們最終發(fā)布 encoding/json/v2 時(shí),encoding/json (v1) 將成為它的一個(gè)薄包裝,確保不從 v1 遷移的用戶仍能受益于 v2 中的優(yōu)化和安全修復(fù)。

總結(jié)

通過閱讀本文的標(biāo)準(zhǔn)庫 v2 的設(shè)計(jì)講解,能夠感受到其實(shí) @Russ Cox 已經(jīng)對(duì) Go 兼容性這塊做好了規(guī)劃?;臼窍葎?dòng) Go1 兼容性前后保障的準(zhǔn)則,再動(dòng)標(biāo)準(zhǔn)庫。同時(shí)標(biāo)準(zhǔn)庫 v2 要兼容 v1 的使用,不能直接就是完全不維護(hù)了。

這樣對(duì)于用戶的得益雖然是較大的,但對(duì)于 Go 核心團(tuán)隊(duì)來講,維護(hù)的工作量和可能出現(xiàn)的程序意外(BUG)的概率也會(huì)變大,因?yàn)橐嫒莸男吕蠄鼍岸甲兌嗔恕?/p>

不論怎么說,未來這將會(huì)出現(xiàn)。大家可以一起見證 Go 標(biāo)準(zhǔn)庫 v2 接下來的發(fā)展!我猜 json v2 包要快轉(zhuǎn)正了。

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

2025-09-15 08:49:44

GoJSONAPI

2025-03-06 08:54:24

泛型類型MapGo1

2013-10-21 17:54:00

代碼重構(gòu)修改

2010-08-06 14:07:21

RIP V2

2010-08-05 17:00:04

RIP V2協(xié)議

2010-06-25 14:54:54

RIP-V2協(xié)議

2011-03-17 17:06:38

數(shù)據(jù)庫發(fā)展方向

2023-08-15 10:12:11

TypeScript標(biāo)準(zhǔn)庫

2025-10-31 09:01:37

2021-08-18 10:39:13

Ubuntu 21.1Linux 內(nèi)核開發(fā)人員

2023-02-03 09:10:32

大數(shù)據(jù)SeaTunnel

2023-04-02 23:13:07

Go語言bufio

2013-01-19 09:45:31

App移動(dòng)開發(fā)趨勢

2013-04-13 13:49:35

組播IGMP V2包

2012-04-24 18:10:56

華為E5

2009-10-15 09:35:04

Oracle新數(shù)據(jù)庫機(jī)

2023-07-18 14:50:15

2022-12-14 10:21:25

目標(biāo)檢測框架

2025-05-20 08:00:00

Go語言Gin

2021-08-13 12:05:15

Goneturl
點(diǎn)贊
收藏

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