Неразрешенная ссылка 'err' - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь преобразовать 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, то я смогу получить к нему доступ в основной функции.Это было бы здорово.

...