Что выведет код при выполнении?

Код выведет:

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

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

Код выведет:

Подробный разбор

Ответ с пояснениями

Условие

Что выведет код при выполнении?

package main

import "fmt"

type Counter struct { val int }

func (c Counter) IncVal() { c.val++ }

func (c *Counter) IncPtr() { c.val++ }

func main() { c := Counter{val: 1} c.IncVal() fmt.Print(c.val, " ") c.IncPtr() fmt.Print(c.val) }

Ответ

Код выведет:

1 2

Объяснение:

  • Метод IncVal() имеет получателя по значению (c Counter), поэтому внутри метода создаётся копия структуры Counter. Увеличение c.val++ изменяет копию, а не оригинал, поэтому значение val в main остаётся 1.
  • Метод IncPtr() имеет получателя по указателю (c *Counter), поэтому изменения внутри метода влияют на оригинальный объект. После вызова c.IncPtr() значение val увеличивается на 1 и становится 2.

Таким образом, сначала выводится 1, затем после вызова метода с указателем — 2.

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

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

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

Подробнее