預計要在明年正式發布的Go 1.16,Go團隊現在釋出Beta版本,供開發人員測試嚐鮮。這個版本主要的更新,在於改進核心函式庫以及Runtime,語言本身並無新增功能。核心函式庫有2個重要更新,分別是嵌入檔案以及檔案系統,Go 1.16加入了新的嵌入套件,只要使用//go:embed指令,就能存取嵌入正在執行中Go程式的檔案。

另一個核心函式庫的更新,則是強化檔案系統,新的io/fs套件,定義了一個唯讀檔案樹的抽象,稱之為fs.FS介面,官方同時修改標準函式庫套件,以適用該介面。在介面的生產端,新的embed.FS類型以及zip.Reader皆實作了fs.FS,而新的os.DirFS函式,則提供由作業系統檔案樹所支援的fs.FS實作。在消費端,新的http.FS函式會轉換fs.FS成為http.Handler,而html/template和text/template套件的ParseFS函式和方法,則會從fs.FS讀取樣板。

Go 1.16同時改進了Runtime,新的runtime/metrics套件,新增了一個用來從Go Runtime,讀取實作定義指標的穩定介面,取代現有的runtime.ReadMemStats和debug.GCStats函式,如此不只更加通用,效能也更好。而開發者現在可以還設定GODEBUG環境變數inittrace=1,這將會使Runtime在執行每一個套件初始時,都會發出單行標準錯誤,總結執行時間和記憶體配置,這將能幫助開發者,找出Go程式的啟動效能瓶頸或是其他錯誤。

現在於Linux上,Runtime會預設積極地向作業系統釋出記憶體,而非在作業系統出現記憶體壓力,才懶散的釋放記憶體,官方提到,這樣的改變,將會使得RSS等程序層級的記憶體統計更加精確,能夠反應出被Go程式實際使用的物理記憶體。

Go 1.16最終版本預計將會在2021年2月發布,近2年的Go語言功能更新變慢,主要是因為在2018年底的時候,加入了提案評估程序,以限制Go功能的發展,盡可能降低對仰賴Go的系統,造成過多的衝擊,目前Go團隊僅選擇少量提案,解決每個發布版本最重要的問題,避免分裂開發生態系。

熱門新聞

Advertisement