TGViewer
Thank Go! Thank Go! @thank_go · 3.33K subscribers
Post #267 3.16K
string ⇄ []byte

Все знают, как преобразовать байтовый срез в строку и обратно:

b := []byte{...}
s := string(b) // 1


s := "..."
b := []byte(s) // 2


И ➀ string(b) и ➁ []byte(s) создают копию данных длиной len(x) — на стеке или в куче, в зависимости от ситуации.

Цикл с преобразованием string(b) тоже создает копию:

for _, r := range string(b) {
...
}


А вот цикл с преобразованием []byte(s) копию никогда не создает — итерация идет прямо по байтам оригинальной строки:

for _, ch := range []byte(s) {
...
}


Такая оптимизация компилятора.
  • ❤ 28
  • 👍 24
More from @thank_go
  1. Sep 26, 2026Шпаргалка по многозадачности Подготовил интерактивную памятку по многозадачности в Go: — Г…
  2. Sep 2, 2026Множественный разврат возврат Сколько значений можно вернуть из функции через multi-return…
  3. Aug 31, 2026Ошибка ошибка ошибка ошибка Это выражение выглядит странновато, но оно полностью корректно…
  4. Aug 30, 2026Post #280
  5. Aug 25, 2026JSON v2 в Go 1.27 Вторая версия json-пакета впервые появилась как экспериментальная в Go 1…
  6. Aug 12, 2026strings.CutLast Из небольших изменений в Go 1.27 я больше всего рад strings.CutLast. Эта ф…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →