Какой вывод получит программа в консоли (пример 77)

Программа напечатает 1. Метод set имеет value receiver и изменяет только копию flags, а не исходное значение.

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

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

Программа напечатает 1. Метод set имеет value receiver и изменяет только копию flags, а не исходное значение.

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

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

Условие

Определите, что напечатает консоль после выполнения следующего Go‑кода:

package main

import "fmt"

var (
    bitA flag = 1
    bitB flag = 1 << 1
    bitC flag = 1 << 2
)

type flag uint8

func (f flag) set(ff flag) {
    f |= ff
}

func main() {
    flags := bitA
    flags.set(bitC)
    fmt.Printf("%b\n", flags)
}

Ответ

Программа напечатает 1. Метод set имеет value receiver и изменяет только копию flags, а не исходное значение.

Для изменения на месте используйте func (f *flag) set(ff flag) { *f |= ff }: тогда после bitA|bitC получится двоичное 101. Другой вариант — возвращать новое значение и присваивать его вызывающему. Объявленные bitB и bitC на уровне пакета допустимы даже без использования каждого в main.

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

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

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

Подробнее