Комментарии 11
Конкатенация строк.
Примеры простые и тут хорошо видно кто выигрывает)
goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz
BenchmarkConcatOperator-4 62212492 19.09 ns/op 0 B/op 0 allocs/op
BenchmarkSprintf-4 6850207 172.6 ns/op 48 B/op 3 allocs/op
BenchmarkStringBuilder-4 19044630 53.52 ns/op 24 B/op 2 allocs/op
Ну так а микрооптимизации где? Про что статья?)
Каждая миллисекунда имеет значение, микрооптимизация это must have, особенно на языке Go.
Серьезно, б..... Как только вы обращаетесь хоть к одному внешнему сервису, по сети, а вы будете это делать, иначе у вас сферический конь в вакууме, забудьте слово "микрооптимизации".
Убрать из названия статьи слова про микрооптимизации и текст будет неплох для новичков.
А как же strings.Join?
А как же складывать строки байтами через unsafe?
Коротко об этой статье: галопом по Европам. Про память очень скудно: сказали про значения и указатели, но ни слова о stack, heap и escape analysis, а стоило, потому что ключевая разница в производительности заключается именно в том, в какой области памяти будет выделено значение. Не сказано, в каких случаях escape analysis может НЕ выделить память в heap для значения доступного по указателю, когда копирование значения быстрее, а когда медленнее чем аллокация.
Про строки вообще тихий ужас: пример противоречит заявленному. strings.Builder совсем не самый быстрый в данном примере, потому что конкатенируются два литерала и компилятор Go абсолютно логично делает это во время компиляции, от чего конкатенация оказалась самым быстрым вариантом, хотя на практике это вовсе не так.
Про профилировку тоже очень скудно: сказано как собирать метрики, а как их читать и как делать выводы из прочитанного... Ни слова. Про мьютексы аналогично: нет примеров оптимизаций мьютексов, нет примеров поиска проблемных мест по профилю.
На мой взгляд, заголовок статьи вводит в заблуждение. Речь в ней почти не идет о микрооптимизациях кода. Большая часть текста посвящена Go и его общему устройству.
Хороший язык на "го" не назовут.
Эффективность на максимум: Микрооптимизации в Golang