Go: почему b[0] = "h" не компилируется для []byte?

В коде есть ошибка компиляции. В строке b[0] = "h" пытаются присвоить байту символ в двойных кавычках, что в Go означает строку, а не байт.

Короткий ответ

Что ответить на собеседовании

В коде есть ошибка компиляции. В строке 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', после чего срез байт обратно преобразуется в строку и выводится.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее