Sobes.tech
Junior — Middle

Kuidas teie rakenduses toimub erandite ja vigade haldamine?

sobes.tech AI

Vastus AI-lt

Go keeles vigade haldamine erineb paljudest teistest keeltest, kuna siin puuduvad tavapärased erandid. Selle asemel tagastavad funktsioonid tavaliselt vea (error) väärtuse teise tulemuse osana.

Peamised lähenemised:

  • Vea kontroll pärast funktsiooni kutsumist:

    result, err := someFunction()
    if err != nil {
        // vea töötlemine
        log.Println("Viga:", err)
        return err
    }
    // jätka tulemusega
    
  • Oma vigatüüpide loomine kasutades errors.New või fmt.Errorf informatiivsemate sõnumite jaoks.

  • Paanik (panic) ja taastumine (recover) kasutatakse harva, peamiselt kriitiliste vigade korral, mis ei tohiks normaalset voogu häirida.

  • Vigade logimine ja nende ülespoole tagastamine tsükli keskse töötlemise jaoks.

Näide vea töötlemisest:

package main

import (
    "errors"
    "fmt"
)

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("nulliga jagamine")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Viga:", err)
        return
    }
    fmt.Println("Tulemus:", result)
}

Seega, Go keeles käsitletakse vigu selgelt, mis tõstab koodi loetavust ja usaldusväärsust.