Программа напечатает 1. Метод set имеет value receiver и изменяет только копию flags, а не исходное значение.
Какой вывод получит программа в консоли (пример 77)
Программа напечатает 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.