Назад к задачам
Junior — Senior
4

Поведение сравнения error с nil при возврате нулевого указателя

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Нужно исследовать, как работает функция, возвращающая значение типа error, и какие строки появятся в выводе при проверке результата на nil. Особое внимание следует уделить тому, что интерфейс error может хранить нулевой указатель конкретного типа (например, *os.PathError), что меняет результат сравнения с nil.

func someFunc(shouldReturnErr bool) error {
  var err *os.PathError = nil

  if shouldReturnErr {
    return errors.New("time to throw error")
  }

  return err
}

func main() {
  errTrue := someFunc(true)
  fmt.Println(errTrue)
  fmt.Println(errTrue == nil)

  fmt.Println()

  errFalse := someFunc(false)
  fmt.Println(errFalse)
  fmt.Println(errFalse == nil)
}

Проанализируйте, какие значения будет выводить программа в обоих случаях и почему сравнение с nil даёт ожидаемый или неожиданный результат.