Sobes.tech
Middle

errors.Is және errors.As не үшін қажет, олар қандай мәселені шешеді?

sobes.tech AI

AI-дан жауап

Go тіліне арналған errors пакетіндегі errors.Is және errors.As функциялары қателер тізбегімен ыңғайлы әрі қауіпсіз жұмыс істеу үшін арналған, олар оралып немесе бір-біріне салынуы мүмкін.

  • errors.Is(err, target error) bool функциясы err немесе оның тізбегіндегі кез келген қате target қатесіне тең болса, шын мәнінде қайтару үшін пайдаланылады. Бұл нақты тип немесе мәнге сәйкес келетінін анықтау қажет болғанда пайдалы.

  • errors.As(err, &target interface{}) bool функциясы err немесе оның тізбегіндегі кез келген қатені target көрсетілген типке (типке арналған көрсеткіш) түрлендіруге тырысады. Егер түрлендіру сәтті болса, шын мәнінде қайтарып, қатені target-ке жазады.

Олар шешетін мәселе — fmt.Errorf("...: %w", err) немесе басқа механизмдер арқылы оралған қателермен жұмыс істеу қажеттілігі, сонымен қатар бастапқы қателердің нақты типі немесе мәнін тексеру мүмкіндігін сақтау.

Мысал:

if errors.Is(err, os.ErrNotExist) {
    fmt.Println("Файл табылмады")
}

var pathErr *os.PathError
if errors.As(err, &pathErr) {
    fmt.Printf("Жол қатесі: %s\n", pathErr.Path)
}