Вывод: strong, затем some strong, затем some string. s2 и s1 разделяют массив байтов, а исходная строка s0 не изменяется.
Какой текст появится в консоли при запуске программы №4
Вывод: strong, затем some strong, затем some string. s2 и s1 разделяют массив байтов, а исходная строка s0 не изменяется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод получит программа, написанная на Go:
package main
import (
"fmt"
)
func main (){
s0 := "some string"
s1 := []byte(s0)
s2 := s1[5:]
s2[3] = 'o'
fmt.Println(string(s2))
fmt.Println(string(s1))
fmt.Println(string(s0))
}
Ответ
Вывод: strong, затем some strong, затем some string. s2 и s1 разделяют массив байтов, а исходная строка s0 не изменяется.
s1[5:] начинается со слова string. Его четвёртый байт, индекс 3, заменяется с i на o, поэтому получается strong. Преобразование строки в изменяемый []byte обеспечивает независимость от исходной строки; создание среза s2 уже не копирует байты. Для многобайтного UTF-8 произвольный байтовый индекс может повредить символ.