В исходнике ошибки синтаксиса и создания структуры. После их исправления условие err != nil истинно, поэтому выводится usp.
Какой текст появится в консоли при выполнении программы №75
В исходнике ошибки синтаксиса и создания структуры. После их исправления условие 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-указатель.