Какой текст появится в консоли при выполнении программы №75

В исходнике ошибки синтаксиса и создания структуры. После их исправления условие err != nil истинно, поэтому выводится usp.

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

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

В исходнике ошибки синтаксиса и создания структуры. После их исправления условие err != nil истинно, поэтому выводится usp.

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

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

Условие

Определите, какой вывод будет получен после запуска следующего Go‑кода.

package main

import (
        "fmt"
        )

func main(){
    err : = do()
    if err != nil {
        fmt.Println("usp")
    }else {
        fmt.Println("OK")
    }
}

func do() error {
    var p *MyError = nil
    if false {
        p = &MyError("error")
    }

    return p
}

type MyError struct {
    msg string
}
func (e MyError) Error() string{
    return e.msg
}

Ответ

В исходнике ошибки синтаксиса и создания структуры. После их исправления условие err != nil истинно, поэтому выводится usp.

Нужно заменить err : = do() на err := do() и &MyError("error") на &MyError{msg: "error"}. Даже ветвь if false проходит проверку типов.

После этого do возвращает интерфейс error с динамическим типом *MyError и nil-значением. Такой интерфейс не равен nil, поэтому печатается usp. В этом примере метод Error не вызывается. Для отсутствия ошибки следует возвращать именно nil, а не типизированный nil-указатель.

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

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

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

Подробнее