Выбор ответа 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- Ошибка компиляции
- panic
0правильный ответ
Разбор
У Inc ресивер по значению: внутри метода изменяется копия структуры, оригинал c не меняется. Чтобы метод менял состояние, ресивер должен быть указателем func (c *Counter) Inc(). Код корректен и компилируется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Структуры, методы и интерфейсы»
- LRU-кеш на Go: map и двусвязный список
- Очередь с приоритетом через container/heap на Go
- Площади фигур через интерфейс Shape на Go
- Сортировка структур по нескольким ключам на Go
- Что выведет Go: встраивание и вызов метода
- Что выведет Go: интерфейс хранит копию значения
- Что выведет Go: method value и defer копируют ресивер
- Что выведет Go: nil-указатель в интерфейсе error