This is a dojo to experiment with and learn from Go.
Here I might add little code snippets as I experiment with things.
Run benchmarks with make bench. These benchmarks will run a series of tests to answer the question "What is the fastest way to do X in Go?"
Last update: February 28, 2026
Go version: 1.26.0
Running tests...
go test -run=Test. -race ./bench
ok github.com/stefanovazzocell/GoDojo/bench 1.010s
Running benchmarks...
go test -run=Bench -bench=. -benchmem ./bench
goos: linux
goarch: amd64
pkg: github.com/stefanovazzocell/GoDojo/bench
cpu: AMD Ryzen AI 9 HX 370 w/ Radeon 890M
BenchmarkControlFlowSimple/switch-24 1000000000 0.2479 ns/op 0 B/op 0 allocs/op
BenchmarkControlFlowSimple/if-24 1000000000 0.2471 ns/op 0 B/op 0 allocs/op
BenchmarkControlFlowSimple/ifElse-24 1000000000 0.2470 ns/op 0 B/op 0 allocs/op
BenchmarkControlFlowComplex/switch-24 1000000000 0.8440 ns/op 0 B/op 0 allocs/op
BenchmarkControlFlowComplex/if-24 1000000000 0.4989 ns/op 0 B/op 0 allocs/op
BenchmarkControlFlowComplex/ifElse-24 1000000000 0.6287 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/rangeKey-24 5694 206619 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/rangeKeyReuse-24 5845 204460 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/rangeVal-24 5727 206583 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/rangeValReuse-24 5740 216082 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/len-24 5875 204970 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/lenOptimizedA-24 5202 204759 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/lenOptimizedB-24 5790 204378 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/lenRange-24 5767 205122 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopValue/lenRangeReuse-24 5616 204434 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/rangeKey-24 5821 208018 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/rangeKeyReuse-24 5778 208347 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/rangeVal-24 5648 207666 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/rangeValReuse-24 5773 208076 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/rangeBlank-24 5774 207725 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/len-24 5773 207481 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/lenOptimizedA-24 5764 207889 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/lenOptimizedB-24 5742 208919 ns/op 0 B/op 0 allocs/op
BenchmarkSliceLoopCount/lenRange-24 5769 207891 ns/op 0 B/op 0 allocs/op
BenchmarkIntToString/Sprintf-24 29775320 43.71 ns/op 16 B/op 2 allocs/op
BenchmarkIntToString/strconvItoa-24 99323926 12.80 ns/op 7 B/op 0 allocs/op
BenchmarkIntToString/strconvFormatInt-24 90850278 12.79 ns/op 7 B/op 0 allocs/op
BenchmarkLocks/Mutex/Sequential-24 140501044 8.452 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Mutex/Parallel-24 20320502 63.80 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/RWMutex/Sequential-24 59677722 18.18 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/RWMutex/Parallel-24 13857146 88.61 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/RWMutexRead/Sequential-24 139917187 8.596 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/RWMutexRead/Parallel-24 49232934 26.03 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Bool/Sequential-24 136770542 8.719 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Bool/Parallel-24 3491707 347.7 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/int32/Sequential-24 136890819 8.818 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/int32/Parallel-24 3899456 349.5 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/int64/Sequential-24 139435521 8.534 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/int64/Parallel-24 3524259 349.0 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Uint32/Sequential-24 137480391 8.759 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Uint32/Parallel-24 3457902 345.1 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Uint64/Sequential-24 140398618 8.669 ns/op 0 B/op 0 allocs/op
BenchmarkLocks/Uint64/Parallel-24 3963360 351.3 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Mutex/Sequential-24 144781120 8.322 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Mutex/Parallel-24 18950785 65.54 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/RWMutex/Sequential-24 67025634 17.33 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/RWMutex/Parallel-24 13789954 86.20 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/RWMutexRead/Sequential-24 144716866 8.387 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/RWMutexRead/Parallel-24 46299986 26.18 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Bool/Sequential-24 145020438 8.101 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Bool/Parallel-24 3831898 305.0 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/int32/Sequential-24 147355602 8.121 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/int32/Parallel-24 3890670 304.6 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/int64/Sequential-24 148110147 8.094 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/int64/Parallel-24 3832327 307.9 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Uint32/Sequential-24 148585573 8.140 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Uint32/Parallel-24 4052112 302.9 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Uint64/Sequential-24 149037546 8.124 ns/op 0 B/op 0 allocs/op
BenchmarkLocksNoWork/Uint64/Parallel-24 3853905 310.8 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/rangeKey-24 286965804 4.422 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/rangeVal-24 472132285 2.318 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/len-24 699778526 1.795 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/lenOptimizedA-24 671535657 1.780 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/lenOptimizedB-24 667911943 1.830 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len10/stringsReader-24 340012587 3.541 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/rangeKey-24 1144 1050276 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/rangeVal-24 1239 948952 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/len-24 5779 204576 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/lenOptimizedA-24 5864 205773 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/lenOptimizedB-24 5869 204362 ns/op 0 B/op 0 allocs/op
BenchmarkStringCharLoop/len1000000/stringsReader-24 4644 270387 ns/op 0 B/op 0 allocs/op
BenchmarkRandom64Bytes/random64SliceBuffer-24 1505371 807.5 ns/op 64 B/op 1 allocs/op
BenchmarkRandom64Bytes/randomSlice64Make-24 1568844 775.1 ns/op 64 B/op 1 allocs/op
BenchmarkRandom64Bytes/random64SliceAppend-24 1483329 808.0 ns/op 64 B/op 1 allocs/op
BenchmarkRandom64Bytes/random64SliceReader-24 24664242 47.77 ns/op 0 B/op 0 allocs/op
BenchmarkRandom64Bytes/random64Array-24 1673187 720.4 ns/op 0 B/op 0 allocs/op
BenchmarkRandom64Bytes/random64ArrayExpanded-24 1652365 724.8 ns/op 0 B/op 0 allocs/op
BenchmarkSha256three/small/manyWrites-24 17424411 70.72 ns/op 32 B/op 1 allocs/op
BenchmarkSha256three/small/append-24 11672538 139.1 ns/op 160 B/op 3 allocs/op
BenchmarkSha256three/small/buffer-24 10445715 115.9 ns/op 96 B/op 2 allocs/op
BenchmarkSha256three/small/preprocess-24 15830134 74.23 ns/op 32 B/op 1 allocs/op
BenchmarkSha256three/large/manyWrites-24 1390639 882.1 ns/op 32 B/op 1 allocs/op
BenchmarkSha256three/large/append-24 752101 1612 ns/op 3360 B/op 3 allocs/op
BenchmarkSha256three/large/buffer-24 750860 1436 ns/op 1824 B/op 2 allocs/op
BenchmarkSha256three/large/preprocess-24 1440596 829.4 ns/op 32 B/op 1 allocs/op
BenchmarkSliceAppendOne/simple-24 31057586 37.09 ns/op 96 B/op 1 allocs/op
BenchmarkSliceAppendOne/appendEachWithHint-24 1000000000 0.2079 ns/op 0 B/op 0 allocs/op
BenchmarkSliceAppendOne/appendSliceWithHint-24 232369872 5.134 ns/op 0 B/op 0 allocs/op
BenchmarkSliceAppendOne/appendTogetherWithHint-24 1000000000 0.2283 ns/op 0 B/op 0 allocs/op
BenchmarkSliceAppendOne/preSized-24 1000000000 0.2086 ns/op 0 B/op 0 allocs/op
BenchmarkSliceAppendOne/preSizedAll-24 1000000000 0.2072 ns/op 0 B/op 0 allocs/op
BenchmarkStrHash-24 859419766 1.365 ns/op 0 B/op 0 allocs/op
BenchmarkHashFnv-24 738147986 1.834 ns/op 0 B/op 0 allocs/op
BenchmarkStringBufferReader/bufio.Reader-24 988342 1221 ns/op 5768 B/op 8 allocs/op
BenchmarkStringBufferReader/native-24 100000000 10.64 ns/op 0 B/op 0 allocs/op
BenchmarkStringStartWithShort/stringsHasPrefix-24 800339433 1.497 ns/op 0 B/op 0 allocs/op
BenchmarkStringStartWithShort/LoopStartsWith-24 277420131 4.018 ns/op 0 B/op 0 allocs/op
BenchmarkStringStartWithLong/stringsHasPrefix-24 558754718 2.163 ns/op 0 B/op 0 allocs/op
BenchmarkStringStartWithLong/LoopStartsWith-24 18823412 61.55 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/uint8/inline-24 1000000000 0.2110 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/uint8/tmp-24 1000000000 0.2078 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/uint8/xor-24 1000000000 0.2037 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/int/inline-24 1000000000 0.2100 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/int/tmp-24 1000000000 0.2041 ns/op 0 B/op 0 allocs/op
BenchmarkSwap/int/xor-24 1000000000 0.2043 ns/op 0 B/op 0 allocs/op
BenchmarkTextConcatSmall/Sprint-24 23622180 52.30 ns/op 16 B/op 1 allocs/op
BenchmarkTextConcatSmall/Plus-24 1000000000 0.2077 ns/op 0 B/op 0 allocs/op
BenchmarkTextConcatSmall/Builder-24 38473149 31.06 ns/op 24 B/op 2 allocs/op
BenchmarkTextConcatSmall/Join-24 42611030 26.58 ns/op 16 B/op 1 allocs/op
BenchmarkTextConcatLarge/Plus-24 139604 8163 ns/op 31728 B/op 99 allocs/op
BenchmarkTextConcatLarge/Builder-24 2174928 551.8 ns/op 1912 B/op 8 allocs/op
BenchmarkTextConcatLarge/BuilderPrealloc-24 5802667 208.5 ns/op 640 B/op 1 allocs/op
BenchmarkTextConcatLarge/Join-24 729019 1522 ns/op 5104 B/op 9 allocs/op
BenchmarkTextConcatLarge/JoinReserved-24 1789850 604.7 ns/op 640 B/op 1 allocs/op
BenchmarkTextConcatLarge/JoinPrealloc-24 2551195 546.4 ns/op 640 B/op 1 allocs/op
BenchmarkValidateZeroBits/binaryBits-24 1000000000 1.093 ns/op 0 B/op 0 allocs/op
BenchmarkValidateZeroBits/mask-24 1000000000 1.118 ns/op 0 B/op 0 allocs/op
BenchmarkValidateZeroBits/loop-24 717894930 1.646 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/stefanovazzocell/GoDojo/bench 157.933s