Я пытаюсь преобразовать int в строку.Для этого мне нужно (int, error = strconv.Atoi(string)
Но по какой-то причине ошибка станет неразрешенной ссылкой.
Если я изменю =
на :=
, как это (klantnummerInt, err := strconv.Atoi(klantnummerString)
), то я не получу ошибку.Но потом я сталкиваюсь с другой проблемой.
Потому что после цикла for мне снова нужен int(klantnummerInt)
.Но я не смогу его получить, потому что он был определен в цикле for и недоступен вне цикла for.
Я также пытался поместить код в оператор switch, ноесли я это сделаю, это выдаст мне следующую ошибку:
паника: sql: ожидается 0 аргументов, получено 1
func main() {
scanner := bufio.NewScanner(os.Stdin)
var klant Klant
var klantnummerString string
var klantnummerInt int
var keuze string
for {
fmt.Println("voer het klantnummer in")
fmt.Println("")
scanner.Scan()
klantnummerString = scanner.Text()
klantnummerInt, err = strconv.Atoi(klantnummerString)
if err != nil {
fmt.Println("Geen geldig Klantnummer ingevoerd!")
fmt.Println()
} else {
klant = klantnummerControleren(klantnummerInt)
if klant.Klantnummer == 0 {
fmt.Println()
fmt.Println("Geen klant met klantnummer", klantnummerInt, " aanwezig")
fmt.Println()
} else if klant.Klantnummer == klantnummerInt {
fmt.Println("Wilt u een bestelling aanmaken voor deze klant?")
fmt.Println(klant.Klantnummer, klant.Voornaam, klant.Achternaam)
fmt.Println("")
fmt.Println("[JA]")
fmt.Println("[NEE]")
fmt.Println("")
scanner.Scan()
keuze = strings.ToUpper(scanner.Text())
if keuze == "" {
fmt.Println("Maak een keuze!")
continue
} else if keuze == "JA" {
fmt.Println("")
fmt.Println("Uw keuze is JA")
} else {
if keuze != "JA" {
fmt.Println("")
fmt.Println("Uw keuze is NEE")
continue
}
}
break
}
}
}
klant = klantGegevens(klantnummerInt)
fmt.Println(klant.Leeftijd)
// begin hier
}
func klantnummerControleren(nummer int) Klant {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/vitaintellectdb")
checkErr(err)
queryKlantnummer := "SELECT klantnummer, voornaam, naam FROM klant WHERE klantnummer = ?"
rows, err := db.Query(queryKlantnummer, nummer)
checkErr(err)
var klant Klant
for rows.Next() {
err := rows.Scan(&klant.Klantnummer, &klant.Voornaam, &klant.Achternaam)
checkErr(err)
}
rows.Close()
return klant
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
type Klant struct {
Klantnummer int
Voornaam string
Achternaam string
}
Было бы неплохо, если ошибка будетне быть неразрешенной ссылкой больше.Это решит проблему.
Если в цикле for будет использоваться var klantnummer, то я смогу получить к нему доступ в основной функции.Это было бы здорово.