未解决的参考“ err”

时间:2019-06-24 08:06:39

标签: mysql for-loop if-statement go func

我正在尝试将int转换为字符串。为此,我需要(int, error = strconv.Atoi(string)

但是由于某种原因,该错误将成为未解决的参考。

如果我将=更改为:=,就像这样(klantnummerInt, err := strconv.Atoi(klantnummerString)),那么我不会得到此错误。但是后来我遇到了另一个问题。

因为在for循环之后,我再次需要int(klantnummerInt)。但是我无法获得它,因为它已在for循环中定义,并且无法在for循环之外访问。

我还尝试将代码放入switch语句中,但是如果这样做,则会出现以下错误:

  

panic: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
}

如果err不再是无法解决的引用,那就太好了。这样可以解决问题。

如果在for循环中使用var klantnummer,那么我将可以在func主程序中访问它。太棒了。

0 个答案:

没有答案