package main import ( "encoding/json" "fmt" "log" "math/rand" "net/http" "strconv" ) type prob struct { Operation string First int Second int Score int } type solution struct { Status bool Score int } type JsonHandler func(http.ResponseWriter, *http.Request) func (h JsonHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "application/json") h(w, req) } func problem(w http.ResponseWriter, req *http.Request) { operation := "+" if r := rand.Intn(2); r == 0 { operation = "-" } first := rand.Intn(MAX) var second int if operation == "-" { if first == 0 { second = 0 } else { second = rand.Intn(first) } } else { second = rand.Intn(MAX) } r := prob{operation, first, second, 66} b, err := json.Marshal(r) if err != nil { log.Fatal("issue with json marshalling", err) } j := string(b) fmt.Println("problem", j) fmt.Fprintf(w, j) } func attempt(w http.ResponseWriter, req *http.Request) { first, err := strconv.Atoi(req.FormValue("first")) if err != nil { log.Fatal("cannot parse first", err) } operation := req.FormValue("operation") second, err := strconv.Atoi(req.FormValue("second")) if err != nil { log.Fatal("cannot parse second", err) } var guess int answer := req.FormValue("answer") if answer == "" { guess = 0 } else { guess, err = strconv.Atoi(answer) if err != nil { log.Fatal("cannot parser answer", err) } } if err != nil { log.Fatal("cannot parse answer", err) } var result bool if operation == "+" { result = first+second == guess } else if operation == "-" { result = first-second == guess } b, err := json.Marshal(solution{result, 66}) if err != nil { log.Fatal("cannot marshal solution", err) } j := string(b) fmt.Println("attempt", j) fmt.Fprintf(w, j) }