国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go1.25 新特性:支持 FlightRecorder 模式、支持讀取符號鏈接、OS 版本推進等

開發 前端
本次主要是針對一些細致的特性進行了說明,像是大家可以檢查自己 macOS 是否符合新版本的訴求。之前我就有因此將 OS 和集群版本升級的訴求。

大家好,我是煎魚。

最近 Go 在前幾天已經發布了 Go1.25 的 RC1 版本:

圖片圖片

這次還是比較準時的。之前 Go1.25 新特性我們也介紹了不少,今天分享一些零碎但偶爾可能需要關注的新特性點。

Go 所要求的 OS 版本推進

每次新版本迭代,都會迎來 OS 系統版本的進一步的新老推進,是我們需要及時關注的。為此之前還推進了測試老集群的版本升級。

圖片圖片

  • MacOS 系統:從 Go1.25 版本起,需要 macOS 12 Monterey 或更高版本。對以前版本的支持已經停止。
  • Windows 系統:Go1.25 是最后一個包含對 32 位 Windows ARM 架構(GOOS=windows,GOARCH=arm) 支持的版本,這個移植版本存在問題(被稱為“broken”)。
  • 從 Go1.26 開始,這個架構支持將被移除,即不再支持在 32 位的 Windows ARM 系統上編譯或運行 Go 程序。
  • Linux 系統:內核方面沒有新的變化要求。

Panic 輸出日志更簡潔

當程序因為一個未處理的 panic(已被 recover 后又重新 panic)而退出時,打印的信息現在不會再重復 panic 值的文本內容。

之前如果一個程序執行了 panic("PANIC"),然后通過 recover 捕獲了這個 panic,接著又使用原始值重新 panic,他會打印:

panic: PANIC [recovered]
 panic: PANIC

現在,程序將改為打印:

panic: PANIC [recovered, repanicked]

本次 Go1.25 主要就是將兩次 panic 輸出的語義信息合并到一行中,并避免重復顯示 panic 值 "PANIC",讓日志更簡潔清晰。

ReadLinkFS、DirFS 支持獲取符號鏈接的指向位置

在 Go1.25 中,引入了一個新的接口,稱為 ReadLinkFS。這個接口提供了讀取文件系統中符號鏈接(symbolic links)的能力:

圖片圖片

ReadLinkFS 對應的接口如下:

type ReadLinkFS interface {
 FS

// ReadLink returns the destination of the named symbolic link.
// If there is an error, it should be of type [*PathError].
 ReadLink(name string) (string, error)

// Lstat returns a [FileInfo] describing the named file.
// If the file is a symbolic link, the returned [FileInfo] describes the symbolic link.
// Lstat makes no attempt to follow the link.
// If there is an error, it should be of type [*PathError].
 Lstat(name string) (FileInfo, error)
}

ReadLinkFS 接口允許程序讀取符號鏈接的目標路徑。這意味著開發者可以通過該接口輕松地獲取符號鏈接指向的實際文件或目錄位置。

同時還包括對 os.DirFS 的改進,使其實現了 ReadLinkFS 接口:

圖片圖片

這意味著在使用 os.DirFS 時,用戶也可以利用該接口來處理符號鏈接。

TypeAssert 支持對值進行斷言

在日常 Go 程序進行反射時,我們一般是使用 reflect.ValueOf 方法來進行。但是經過性能測試,發現了一些問題。

基準測試代碼:

func Benchmark(b *testing.B) {
    // 通過反射創建一個可尋址的 time.Time 值
 v := reflect.ValueOf(new(time.Time)).Elem()
    // // 開啟內存分配報告
 b.ReportAllocs()
 for i := 0; i < b.N; i++ {
      // 將反射值轉為接口,再轉回 time.Time
      _ = v.Interface().(time.Time)
 }
}

這段基準測試的目標是測量 v.Interface().(time.Time) 操作的性能和內存開銷。

測試結果:

Benchmark-24     37673833         29.74 ns/op       24 B/op        1 allocs/op

需要重點關注的是:每次操作中發生了 1 次內存分配。

會有內存分配的原因是:

  • 由于 v 是一個可尋址的 time.Time 值(通過 Elem() 獲取),Go 的 reflect.Value.Interface() 會復制這個值。
  • 復制的目的是:為了防止外部代碼通過接口訪問時直接修改原始數據(因為原始值是可尋址的,為了保持封裝性和安全性)。
  • 這個復制過程會導致 一次堆內存分配(alloc),從而出現了 24 B/op 和 1 allocs/op

在前幾年 tailscale 的 @Joe Tsai 大佬發現了這個問題,并提出了以下提案:

圖片圖片

當時提案上希望增加 TypeAssert 的泛型方法:

// AssertTo is semantically equivalent to:
//    v2, ok := v.Interface().(T)
func AssertTo[T any](v reflect.Value "T any") (T, bool)

新增該方法后,其作用語義上等同于 v.Interface().(T),但有效避免了 interface 裝箱帶來的復制和堆分配。

從而在性能關鍵路徑(例如:反射密集的場景)提供了更高效的替代方案。

后續的用法如下:

t, ok := reflect.AssertTo[time.Time](v "time.Time")
...

當然,最后到 Go1.25 函數的名字改了,改成以下函數簽名:

func TypeAssert[T any](v Value "T any") (T, bool)

改名的原因是 rsc 認為:簡單的 Assert 可能會與 C 風格的斷言混淆。另外改名后有了 Type 前綴,也就不需要 To 后綴了。

trace 支持 FlightRecorder 模式

FlightRecorder 是什么

“Flight recording”(飛行記錄)是一種技術,它將追蹤數據保存在一個概念性的環形緩沖區中,并在需要時將其刷新。

該技術的目的是捕獲程序中有趣行為的追蹤數據,即使事先無法預測這些行為會在什么時候發生。

例如:

  • 當 Web 服務未通過健康檢查,或者處理某個請求的時間異常過長時。

具體來說,Web 服務可以在這些異常實際發生時檢測到,但程序員在部署時卻無法準確預知它們會在何時出現。

而在異常發生之后再啟動追蹤往往并沒有什么用,因為此時程序已經執行過了那些“有趣”的部分。

Go FlightRecorder 落地

Go 在 runtime 中能夠做 FlightRecorder,還是得益于之前在以下 issues#60773 對 trace 做過大修和性能優化:

圖片圖片

再同樣由 @Michael Knyszek 提起以下 FlightRecorder 的正式提案和實現內容:

圖片圖片

在 Go 中,所有追蹤數據將被組織為一系列自包含的分區(partitions)。這一實現上的變更為 Go 的執行追蹤器添加類似“飛行記錄”的能力提供了機會 —— 即始終保留至少一個分區,可在任意時刻快照保存。

而正因為 issues#60773 的優化,Go trace 的性能有了大幅優化。長時間追蹤下啟用 FlightRecorder 已經足夠輕量,不再是一個性能負擔。從而在這個版本總算是實現了。

以下是 runtime/trace 包中的新 API,用于啟用 FlightRecorder。大家可以自行在 Go 程序中進行觸發。

如下 API 代碼:

package trace

type FlightRecorder struct {
    ...
}

func (*FlightRecorder) SetMinAge(d time.Duration)

func (*FlightRecorder) MinAge() time.Duration

func (*FlightRecorder) SetMaxBytes(bytes uint64)

func (*FlightRecorder) MaxBytes() uint64

func (*FlightRecorder) Start() error

func (*FlightRecorder) Stop() error

func (*FlightRecorder) Enabled() bool

func (*FlightRecorder) WriteTo(w io.Writer) (n int64, err error)

完整的 API 文檔可以到 runtime/trace@master#FlightRecorder[1] 進行查看。

總結

本次主要是針對一些細致的特性進行了說明,像是大家可以檢查自己 macOS 是否符合新版本的訴求。之前我就有因此將 OS 和集群版本升級的訴求。

另外本次的 runtime/trace 的 FlightRecorder 模式支持將帶來更多樣的調試追蹤的提效,反射中 TypeAssert 新方法支持帶來的的性能優化、ReadLinkFS 和 DirFS 支持符合鏈接(軟鏈)的讀取,都是一些有實際效益的優化點。

參考資料

[1] runtime/trace@master#FlightRecorder: https://pkg.go.dev/runtime/trace@master#FlightRecorder

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

2025-07-30 09:06:28

2025-07-21 11:49:44

GoGit子目錄

2025-04-14 08:49:10

2025-08-07 09:09:29

2025-04-29 08:59:37

2025-05-12 08:58:14

GoDWARF5二進制

2025-08-12 02:00:00

Go優化OpenSSL

2025-05-07 08:55:14

GoMap存儲

2025-10-28 01:00:00

GoRecordertrace 格式

2012-11-28 11:01:05

IBMdW

2023-09-12 09:13:24

Shell腳本Dockerfil

2025-02-07 09:18:05

機制Go函數

2012-07-23 14:16:55

火狐瀏覽器

2023-06-08 10:38:19

CinnamonLinux

2021-02-25 15:51:41

Go語言模糊測試功能

2023-03-13 00:10:46

Go語言版本

2013-06-12 15:19:05

iOS7WWDC

2024-12-30 11:05:28

泛型Go類型別名

2022-01-19 08:51:00

Module工作區Go

2025-03-28 01:00:00

Go語言版本
點贊
收藏

51CTO技術棧公眾號

欧美性xxxx69| 亚洲精品日韩欧美| 在线观看国产视频一二三| 国产午夜精品理论片a级大结局| 国产a级全部精品| 我不卡影院28| 国内成+人亚洲| 电影中文字幕一区二区| 国产欧美一区二区在线观看| 国产福利电影| 欧美日韩亚洲成人| 日本在线影院| 国产精品久在线观看| 日韩av中文字幕一区二区| 欧美aⅴ在线观看| 日本丶国产丶欧美色综合| 国产在线不卡一区二区三区| 91亚洲一区精品| www.久久久久久久久| 日韩子在线观看| 国语对白做受69| 精品影视av免费| 丁香六月婷婷| 精品国产欧美一区二区五十路| 国产精品x8x8一区二区| 午夜精品区一区二区三| 一区二区三区小说| 欧美韩国日本| 欧美经典一区二区| 男人久久天堂| 日韩在线三区| 欧美日韩免费高清一区色橹橹| 亚洲精品v亚洲精品v日韩精品| 久久精品丝袜高跟鞋| 亚洲第一久久影院| 久久久久久久久久久久久久久久久久久久| 久久免费看av| 色噜噜狠狠成人网p站| 国内黄色精品| 狠狠干夜夜操| 在线观看91精品国产入口| 欧美经典影片视频网站| 无码中文字幕色专区| 亚洲区在线播放| 91亚洲精华国产精华精华液| 白浆在线视频| 精品久久中出| 欧美性大战久久| 国产一区亚洲| 毛片网站在线| 国产丝袜一区二区三区免费视频| 伊人久久高清| 欧美性视频在线播放| 亚洲美女性生活视频| 激情综合五月婷婷| 欧美亚洲日本精品| 免费日韩在线观看| 亚洲人成五月天| 亚洲女同在线| 欧美人xxx| 99蜜桃在线观看免费视频网站| 日韩一区欧美小说| 日本高清不卡一区二区三区视频 | 人成免费电影一二三区在线观看| 日本在线精品视频| 日本国产一区二区| 免费成人在线视频观看| 日本成人福利| 91se在线观看| 久久精品人人做人人爽电影| 亚洲欧美国产视频| 国产乱子轮精品视频| 国产高清亚洲| heyzo在线观看| 国产亚洲情侣一区二区无| 亚洲女人被黑人巨大进入| 亚洲视频中文字幕| 99精品小视频| 国产极品久久久久久久久波多结野| 中文久久久久久| 91久久久在线| 亚洲成人动漫在线播放| 亚洲人妖在线| 巨人精品**| 午夜影院免费在线| 日日噜噜夜夜狠狠视频| 久久99热只有频精品91密拍| 午夜激情久久久| 成人综合一区| 六月婷婷综合| 懂色av中文在线| 黄色一级影院| 日韩欧美一区二区三区久久婷婷| 精品动漫一区二区三区在线观看| 一区二区三区日韩精品| √8天堂资源地址中文在线| 在线观看18视频网站| 国产亚洲一区在线播放 | a视频在线观看免费| www.男人的天堂| 国产美女永久无遮挡| 欧美高清视频一区| 官网99热精品| 国产精品吊钟奶在线| 久久韩国免费视频| 一本色道久久88综合亚洲精品ⅰ| 欧美伊人久久久久久久久影院| 久久蜜桃一区二区| 国产日韩高清在线| 国产精品一区二区三区99| 欧美三级网页| 99精品视频精品精品视频 | 成人免费91在线看| 亚洲www在线观看| 国产欧美一区二区三区久久人妖 | 99tv成人影院| 婷婷成人av| 久久久国产精品入口麻豆| 久久精品免视看国产成人| 免费观看成年在线视频网站| 91色国产在线| 久久国产亚洲精品无码| 青青在线视频免费| 黑森林福利视频导航| 狠狠色综合一区二区| 国产精品大陆在线观看| 产国精品偷在线| 欧美不卡在线一区二区三区| 精品久久久久久亚洲| 一区二区三区四区五区精品| 久久福利电影| 欧美做爰性生交视频| 国产mv久久久| 91在线|亚洲| 日本在线免费观看一区| 亚洲啊啊啊啊啊| 中文字幕日本最新乱码视频| 九色porny自拍| 日本一区视频| 欧美精品久久| 99久热re在线精品视频| 日韩亚洲视频| 日本免费专区| 欧产日产国产精品视频| 日本在线免费网| 日韩高清在线| 日韩一区电影| 国产成人av一区二区| 欧美视频中文字幕在线| 欧美电视剧在线看免费| 欧美高清视频在线播放| 激情五月综合色婷婷一区二区| 国产freexxxx性播放麻豆| 无线免费在线视频| 日本在线成人| 久久久久久久高潮| 国产乱码精品一区二区三| 成人一级视频在线观看| 在线免费观看日本欧美| 亚洲天堂av在线免费| 久久久久久这里只有精品| 久久影院理伦片| 色免费在线视频| 日韩另类在线| 在线播放日韩| 香蕉成人伊视频在线观看| 色悠悠久久久久| 亚洲精品欧美精品| 黄色网址三级| 国产高清日韩| 国产99一区视频免费| 欧美曰成人黄网| 日本在线观看天堂男亚洲| 青青草国产免费| 精品美女一区| 国产一区二区看久久| 亚洲国产精品va在线| 欧美二级三级| 久操视频在线免费播放| 影院欧美亚洲| 欧美亚洲丝袜传媒另类| 97香蕉超级碰碰久久免费的优势| 国产精品美女久久| 中文字幕在线观看第一页| 九九综合久久| 亚洲精品国产视频| 国产精品吊钟奶在线| 最近中文字幕mv第三季歌词| 红桃成人av在线播放| 一区二区三区欧美亚洲| 91精品国产综合久久久久久蜜臀 | 欧美精品欧美精品系列| 国新精品乱码一区二区三区18| 成人蜜桃视频| 妞干网在线视频| 欧美人妖在线| 51精品秘密在线观看| 国产精品一区二区三区免费 | 91精品国产麻豆国产自产在线 | 美女精品在线|