forked from TrueCloudLab/distribution
3b391d3290
Go 1.18 and up now provides a strings.Cut() which is better suited for splitting key/value pairs (and similar constructs), and performs better: ```go func BenchmarkSplit(b *testing.B) { b.ReportAllocs() data := []string{"12hello=world", "12hello=", "12=hello", "12hello"} for i := 0; i < b.N; i++ { for _, s := range data { _ = strings.SplitN(s, "=", 2)[0] } } } func BenchmarkCut(b *testing.B) { b.ReportAllocs() data := []string{"12hello=world", "12hello=", "12=hello", "12hello"} for i := 0; i < b.N; i++ { for _, s := range data { _, _, _ = strings.Cut(s, "=") } } } ``` BenchmarkSplit BenchmarkSplit-10 8244206 128.0 ns/op 128 B/op 4 allocs/op BenchmarkCut BenchmarkCut-10 54411998 21.80 ns/op 0 B/op 0 allocs/op While looking at occurrences of `strings.Split()`, I also updated some for alternatives, or added some constraints; - for cases where an specific number of items is expected, I used `strings.SplitN()` with a suitable limit. This prevents (theoretical) unlimited splits. - in some cases it we were using `strings.Split()`, but _actually_ were trying to match a prefix; for those I replaced the code to just match (and/or strip) the prefix. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> |
||
---|---|---|
.. | ||
cache | ||
driver | ||
blob_test.go | ||
blobserver.go | ||
blobstore.go | ||
blobwriter.go | ||
blobwriter_nonresumable.go | ||
blobwriter_resumable.go | ||
catalog.go | ||
catalog_test.go | ||
doc.go | ||
error.go | ||
filereader.go | ||
filereader_test.go | ||
garbagecollect.go | ||
garbagecollect_test.go | ||
io.go | ||
linkedblobstore.go | ||
linkedblobstore_test.go | ||
manifestlisthandler.go | ||
manifeststore.go | ||
manifeststore_test.go | ||
ocimanifesthandler.go | ||
ocimanifesthandler_test.go | ||
paths.go | ||
paths_test.go | ||
purgeuploads.go | ||
purgeuploads_test.go | ||
registry.go | ||
schema2manifesthandler.go | ||
schema2manifesthandler_test.go | ||
signedmanifesthandler.go | ||
tagstore.go | ||
tagstore_test.go | ||
v1unsupportedhandler.go | ||
vacuum.go |