Проверяем это ... и то как происходит переразмещение срезов:Многие гоферы знают, что предварительное выделение памяти для срезов влияет на производительность.
Код: Выделить всё
package main
import "fmt"
func main() {
cap1 := 0
arr := make([]byte, 0, cap1)
for cap(arr) < 20000000 {
arr = append(arr, 1)
if cap(arr) != cap1 {
fmt.Printf("%10d | %f\n",
cap(arr), float64(cap(arr))/float64(cap1))
cap1 = cap(arr)
}
}
}
Код: Выделить всё
olej@R420:~/2024/own.BOOKs/BHV.Go.3/examples.work/types$ go run slice.go
8 | +Inf
16 | 2.000000
32 | 2.000000
64 | 2.000000
128 | 2.000000
256 | 2.000000
512 | 2.000000
896 | 1.750000
1408 | 1.571429
2048 | 1.454545
3072 | 1.500000
4096 | 1.333333
5376 | 1.312500
6912 | 1.285714
9472 | 1.370370
12288 | 1.297297
16384 | 1.333333
21760 | 1.328125
28672 | 1.317647
40960 | 1.428571
57344 | 1.400000
73728 | 1.285714
98304 | 1.333333
131072 | 1.333333
172032 | 1.312500
221184 | 1.285714
278528 | 1.259259
352256 | 1.264706
442368 | 1.255814
557056 | 1.259259
704512 | 1.264706
884736 | 1.255814
1114112 | 1.259259
1400832 | 1.257353
1753088 | 1.251462
2195456 | 1.252336
2752512 | 1.253731
3448832 | 1.252976
4317184 | 1.251781
5398528 | 1.250474
6750208 | 1.250379
8445952 | 1.251214
10559488 | 1.250242
13205504 | 1.250582
16515072 | 1.250620
20652032 | 1.250496