Syntac error I can't figure out

I have the following code:

/// package main

import (

"database/sql"

"log"

"net/http"

"text/template"

_ "github.com/go-sql-driver/mysql"

)

type Kinderen struct {

nummer int

naam string

woonplaats string

leeftijd int

zakgeld int

kleedgeld int

totaal int

}

func dbConn() (db *sql.DB) {

dbDriver := "mysql"

dbUser := "root"

dbPass := "######"

dbName := "Zakgeld"

db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)

if err != nil {

panic(err.Error())

}

return db

}

var tmpl = template.Must(template.ParseGlob("form/*"))

func Index(w http.ResponseWriter, r *http.Request) {

db := dbConn()

selDB, err := db.Query("SELECT * FROM Kinderen ORDER BY nummer DESC")

if err != nil {

panic(err.Error())

}

emp := Kinderen{}

res := []Kinderen{}

for selDB.Next() {

var nummer int

var naam, woonplaats string

var leeftijd, zakgeld, kleedgeld, totaal int

err = selDB.Scan(&nummer, &naam, &woonplaats, &leeftijd, &zakgeld, &kleedgeld, &totaal)

if err != nil {

panic(err.Error())

}

emp.nummer = nummer

emp.naam = naam

emp.woonplaats = woonplaats

emp.leeftijd = leeftijd

emp.zakgeld = zakgeld

emp.kleedgeld = kleedgeld

emp.totaal = totaal

res = append(res, emp)

}

tmpl.ExecuteTemplate(w, "Index", res)

defer db.Close()

}

func Show(w http.ResponseWriter, r *http.Request) {

db := dbConn()

nId := r.URL.Query().Get("nummer")

selDB, err := db.Query("SELECT * FROM Kinderen WHERE nummer=?", nId)

if err != nil {

panic(err.Error())

}

emp := Kinderen{}

for selDB.Next() {

var nummer int

var naam, woonplaats string

var leeftijd, zakgeld, kleedgeld, totaal int

err = selDB.Scan(&nummer, &naam, &woonplaats, &leeftijd, &zakgeld, &kleedgeld, &totaal)

if err != nil {

panic(err.Error())

}

emp.nummer = nummer

emp.naam = naam

emp.woonplaats = woonplaats

emp.leeftijd = leeftijd

emp.zakgeld = zakgeld

emp.kleedgeld = kleedgeld

emp.totaal = totaal

res = append(res, emp)

tmpl.ExecuteTemplate(w, "Show", emp)

defer db.Close()

}

func New (w http.ResponseWriter, r *http.Request) {

tmpl.ExecuteTemplate(w, "New", nil)

}

func Edit (w http.ResponseWriter, r *http.Request) {

db := dbConn()

nId := r.URL.Query().Get("nummer")

selDB, err := db.Query("SELECT * FROM Kinderen WHERE nummer=?", nId)

if err != nil {

panic(err.Error())

}

emp := Kinderen{}

for selDB.Next() {

var nummer int

var naam, woonplaats string

var leeftijd, zakgeld, kleedgeld, totaal int

err = selDB.Scan(&nummer, &naam, &woonplaats, &leeftijd, &zakgeld, &kleedgeld, &totaal)

if err != nil {

panic(err.Error())

}

emp.nummer = nummer

emp.naam = naam

emp.woonplaats = woonplaats

emp.leeftijd = leeftijd

emp.zakgeld = zakgeld

emp.kleedgeld = kleedgeld

emp.totaal = totaal

}

tmpl.ExecuteTemplate(w, "Edit", emp)

defer db.Close()

}

func Insert (w http.ResponseWriter, r *http.Request) {

db := dbConn()

if r.Method == "POST" {

naam := r.FormValue("naam")

woonplaats := r.FormValue("woonplaats")

leeftijd := r.FormValue("leeftijd")

zakgeld := r.FormValue("zakgeld")

kleedgeld := r.FormValue("kleedgeld")

insForm, err := db.Prepare("INSERT INTO Kinderen(naam, woonplaats, leeftijd, zakgeld, kleedgeld) VALUES(?,?,?,?,?)")

if err != nil {

panic(err.Error())

}

insForm.Exec(naam, woonplaats)

log.Println("INSERT: Naam: " + naam + " | woonplaats: " + woonplaats + " | leeftijd: " + leeftijd + " | zakgeld: " + zakgeld + " | kleedgeld" + kleedgeld)

}

defer db.Close()

http.Redirect(w, r, "/", 301)

}

func Update (w http.ResponseWriter, r *http.Request) {

db := dbConn()

if r.Method == "POST" {

naam := r.FormValue("naam")

woonplaats := r.FormValue("woonplaats")

leeftijd := r.FormValue("leeftijd")

zakgeld := r.FormValue("zakgeld")

kleedgeld := r.FormValue("kleedgeld")

totaal := r.FormValue("totaal")

nummer := r.FormValue("nummer")

insForm, err := db.Prepare("UPDATE Kinderen SET naam=?, woonplaats=?, leeftijd=?, zakgeld=?, kleedgeld=?, totaal=? WHERE nummer=?")

if err != nil {

panic(err.Error())

}

insForm.Exec(naam, woonplaats, leeftijd, zakgeld, kleedgeld, totaal, nummer)

log.Println("UPDATE: Naam: " + naam + " | woonplaats: " + woonplaats + " | leeftijd: " + leeftijd + " | zakgeld: " + zakgeld + " | kleedgeld" + kleedgeld)

}

defer db.Close()

http.Redirect(w, r, "/", 301)

}

func Delete (w http.ResponseWriter, r *http.Request) {

db := dbConn()

emp := r.URL.Query().Get("nummer")

delForm, err := db.Prepare("DELETE FROM Kinderen WHERE nummer=?")

if err != nil {

panic(err.Error())

}

delForm.Exec(emp)

log.Println("DELETE")

defer db.Close()

http.Redirect(w, r, "/", 301)

}

func main {

log.Println("Server started on: http://localhost:8080")

http.HandleFunc("/", Index)

http.HandleFunc("/show", Show)

http.HandleFunc("/new", New)

http.HandleFunc("/edit", Edit)

http.HandleFunc("/insert", Insert)

http.HandleFunc("/update", Update)

http.HandleFunc("/delete", Delete)

http.ListenAndServe(":8080", nil)

}

When I run this, I get a syntax error which I cant figure out:

.\main.go:94:7: syntax error: unexpected New, expecting (

.\main.go:98:7: syntax error: unexpected Edit, expecting (

.\main.go:126:7: syntax error: unexpected Insert, expecting (

.\main.go:145:7: syntax error: unexpected Update, expecting (

.\main.go:166:7: syntax error: unexpected Delete, expecting (

.\main.go:179:7: syntax error: unexpected main, expecting (

Error: process exited with code 2.

Somebody any ideas on this?

Hi,

The function Show() which is above all of the errors you see has not been closed properly using closing braces ā€œ}ā€

func Show(w http.ResponseWriter, r *http.Request) {

   db := dbConn()

   nId := r.URL.Query().Get("nummer")

   selDB, err := db.Query("SELECT * FROM Kinderen WHERE nummer=?", nId)

   if err != nil {

      panic(err.Error())

   }

   emp := Kinderen{}
   
   for selDB.Next() {

      var nummer int

      var naam, woonplaats string

      var leeftijd, zakgeld, kleedgeld, totaal int

      err = selDB.Scan(&nummer, &naam, &woonplaats, &leeftijd, &zakgeld, &kleedgeld, &totaal)

      if err != nil {

         panic(err.Error())

      }

      emp.nummer = nummer

      emp.naam = naam

      emp.woonplaats = woonplaats

      emp.leeftijd = leeftijd

      emp.zakgeld = zakgeld

      emp.kleedgeld = kleedgeld

      emp.totaal = totaal

      res = append(res, emp)

      tmpl.ExecuteTemplate(w, "Show", emp)

      defer db.Close()

   }  // This closes the for loop. Not the function Show()

Hence every other function definition is screwed up.

As a suggestion Iā€™d like to add that try to use indentations. Use tab spaces when you enter an if statement or a loop or a function so that you can properly identify the beginning and closing braces.

Hope this helps ! :slight_smile:

Thanks!
I was able to proceed!!!

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.