Почему плохо преобразовывать слайс byte в строку

«Почему плохо преобразовывать слайс byte в строку» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Преобразование []byte в string создает новую строку, копируя данные, что может быть неэффективно для больших объемов данных. Кроме того, это может привести к утечкам памяти, если оригинальный []byte изменяется, а строка остается в использовании.

Пример:

data := []byte{'h', 'e', 'l', 'l', 'o'}
str := string(data) // Копирование данных
data[0] = 'H'       // Не влияет на str
fmt.Println(str)    // "hello", а не "Hello"

Для избежания копирования можно использовать unsafe, но это небезопасно:

import "unsafe"
bytes := []byte{'h', 'e', 'l', 'l', 'o'}
str := *(*string)(unsafe.Pointer(&bytes)) // Без копирования, но опасно

Лучше использовать []byte везде, где возможно, или явно копировать, если нужна неизменяемая строка.