Iš teksto į skaičių — Atoi ir patikra
Pereitą pamoką likom su problema: Scanln viską skaito kaip tekstą. "380" — tai simboliai 3, 8, 0, o ne skaičius 380. O jei vartotojas įves "abc"?
Vertėjas iš teksto į skaičių — strconv.Atoi („ASCII to integer"):
import "strconv"
n, err := strconv.Atoi(raw)
if err != nil {
fmt.Println("Not a number.")
continue // back to the menu — no crash
}
Pažįsti šitą formą? Tai 3 pamokos keli grąžinimai: Atoi grąžina (reikšmė, klaida). Jei tekstas nėra skaičius — err netuščias, o tu pats nusprendi, kas toliau. Jokio lūžimo, jokio spėliojimo.
Patikra retai baigiasi vien err != nil — reikšmė turi tilpti ir į tavo taisykles:
if err != nil || n < 0 || n > it.Pages {
fmt.Println("Not a valid number of pages.")
continue
}
„Skaičius" dar nereiškia „tinkamas skaičius": −5 perskaitytų puslapių arba 900 iš 380 — irgi klaidos.
Patarimas.
errčia — tik ragavimas: visa klaidų valdymo sistema (errortipas,defer, failai) — 10 pamokoje. Šiandien užtenka šablono: paverčiau — patikrinau — arba naudoju, arba mandagiai atsisakau.