В коде есть ошибка компиляции. В строке b[0] = "h" пытаются присвоить байту символ в двойных кавычках, что в Go означает строку, а не байт.
Go: почему b[0] = "h" не компилируется для []byte?
В коде есть ошибка компиляции. В строке b[0] = "h" пытаются присвоить байту символ в двойных кавычках, что в Go означает строку, а не байт.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
// Вопрос 1. Что выведет на экран?
package main
import "fmt"
func main() { s := "Hello world" b := []byte(s) b[0] = "h" s = string(b) fmt.Println(s) }
Ответ
В коде есть ошибка компиляции. В строке b[0] = "h" пытаются присвоить байту символ в двойных кавычках, что в Go означает строку, а не байт.
Правильно нужно использовать одинарные кавычки для символа:
b[0] = 'h'
Если исправить эту строку, программа выведет:
hello world
Пояснение: строка s преобразуется в срез байт b, затем первый байт меняется с 'H' на 'h', после чего срез байт обратно преобразуется в строку и выводится.