昨天,Golang開發團隊正式發Golang 1.18,可以通過官方下載頁面下載,下載后注意核對校驗碼。
Golang 1.18 是一個功能上變化較大的大型版本,在語言層面增加了泛型、增加了Fuzzing、工作區以及性能上的改進。之前我們已經文章中蟲蟲給大家已經詳細介紹過,在此,略要地介紹一下。
泛型
Golang 1.18 中,新引入了新的支持使用參數化類型的泛型。支持泛型一直是Golang社區最迫切的功能需求之一,今天終于算是圓夢了,Golang正式跨入泛型語言家族。
func Reverse (type Element) (s []Element) {
first := 0
last := len(s) - 1
for first < last {
s[first], s[last] = s[last], s[first]
first++
last--
}
}
func ReverseAndPrint(s []int) {
Reverse(int)(s)
fmt.Println(s)
}
現在大家可以大膽嘗試和使用這個功能,官方也提供了文檔、范例和視頻教程可供參考。
Fuzzing
Golang 1.18 是第一個具有模糊測試的版本,并被完全集成到其標準工具鏈中。 像泛型一樣,模糊測試在設計中已經存在很長時間了,現在終于正式得到支持。
func FuzzReverse(f *testing.F) {
testcases := []string {"Hello, world", " ", "!12345"}
for _, tc := range testcases {
f.Add(tc)
}
f.Fuzz(func(t *testing.T, orig string) {
rev, err1 := Reverse(orig)
if err1 != nil {
return
}
doubleRev, err2 := Reverse(rev)
if err2 != nil {
return
}
if orig != doubleRev {
t.Errorf("Before: %q, after: %q", orig, doubleRev)
}
if utf8.ValidString(orig) && !utf8.ValidString(rev) {
t.Errorf("Reverse produced invalid UTF-8 string %q", rev)
}
})
}
工作區
Go模塊目前已經得到被普遍采用,并且收獲了開發者的良好口碑。但是對跨多模塊工作是個難題,為此Golang 1.18 中,新引入了工作區模塊就是為了解決這個問題,讓跨多個模塊開發變得簡單。
關于工作區的文檔詳見官方文檔。
性能改善
對于Apple M1、ARM64和PowerPC64用戶有一個好消息。Golang 1.18可以讓你的CPU性能提升提高20%以上。 由于Golang 1.17 的register ABI 調用約定擴展到這些架構。
總結
1.18 對整個Golang 社區來說是一個巨大的里程碑。 希望大家盡快更新,入場享受新版本帶來的紅利。