Выбор ответа Junior Структуры, методы и интерфейсы спрашивают часто обновлено

Метод с ресивером по значению меняет копию

Вопрос

Что выведет код?

type Counter struct{ n int }

func (c Counter) Inc() { c.n++ }

func main() {
    var c Counter
    c.Inc()
    fmt.Println(c.n)
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 0. У Inc ресивер по значению: внутри метода изменяется копия структуры, оригинал c не меняется.

Варианты ответа

  1. 1
  2. Ошибка компиляции
  3. panic
  4. 0правильный ответ

Разбор

У Inc ресивер по значению: внутри метода изменяется копия структуры, оригинал c не меняется. Чтобы метод менял состояние, ресивер должен быть указателем func (c *Counter) Inc(). Код корректен и компилируется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.