пятница, 3 апреля 2020 г.

Преобразование между массивом/срезом байтов и строкой в Golang

Когда вы конвертируете между строкой и срезом (массивом) байтов, вы получаете совершенно новый срез, который содержит те же байты, что и строка, и наоборот.

  • Преобразование не меняет данные;
  • единственное отличие состоит в том, что строки являются неизменяемыми, а срезы байтов могут быть изменены.

Если вам нужно манипулировать символами (рунами) строки, вы можете вместо этого преобразовать строку в срез рун.

Конвертировать строку в байты

Когда вы преобразуете строку в срез байтов, вы получаете новый срез, который содержит те же байты, что и строка.

b := []byte("ABC€")
fmt.Println(b) // [65 66 67 226 130 172]

Обратите внимание, что символ € кодируется в UTF-8 с использованием 3 байтов.

Конвертировать байты в строку

Когда вы конвертируете срез байтов в строку, вы получаете новую строку, которая содержит те же байты, что и срез.

s := string([]byte{65, 66, 67, 226, 130, 172})
fmt.Println(s) // ABC€

Производительность

Эти преобразования создают новый срез или строку и, следовательно, имеют временную сложность, пропорциональную количеству обрабатываемых байтов.

Более эффективная альтернатива в некоторых случаях - использовать построитель строк (strings.Builder), который может объединять строки без избыточного копирования.


Читайте также:


Комментариев нет:

Отправить комментарий