Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

go-1.18-feature

简介

2022-03-15 go 1.18发布了。这里写一篇文章大概聊一下里面有啥特点。

官网解析

泛型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

模糊测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)

}

})

}

Workspaces

工作区

20% Performance Improvements

性能改善

对于Apple M1、ARM64和PowerPC64用户有一个好消息。Golang 1.18可以让你的CPU性能提升提高20%以上。 由于Golang 1.17 的register ABI 调用约定扩展到这些架构。

参考