package main import ( "fmt" "io/ioutil" "os" "encoding/json" "log" "net/http" "math/rand" "strconv" ) type Phrase struct { Phrase string `json:"phrase"` Mode bool `json:"mode"` Answer string `json:"answer"` } type Phrases struct { Phrases []Phrase `json:"phrases"` } var phrases Phrases func ParseJSON() { jsonFile, err := os.Open("phrases.json") if err != nil { log.Fatal(err) } defer jsonFile.Close() byteValue, _ := ioutil.ReadAll(jsonFile) err = json.Unmarshal(byteValue, &phrases) if err != nil { log.Fatal(err) } } func requestHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") i := rand.Intn(len(phrases.Phrases)) fmt.Fprintf(w, `

¿subjuntivo o indicativo?

%s
Pon la palabra en la forma adecuada:
`, phrases.Phrases[i].Phrase, i) } func answerHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") i, err := strconv.Atoi(r.URL.Path[len("/answer/"):]) if err != nil { log.Fatal(err) } p := phrases.Phrases[i] pageContent := "

¿subjuntivo o indicativo?

" + p.Phrase + "
tu respuesta estaba " if r.FormValue("answer") == p.Answer { pageContent += "correcta! Buen hecho
" } else { pageContent += "falsa :'-(
" } j := rand.Intn(len(phrases.Phrases)-1) if j>=i { j++ } pageContent+= "

frase nueva: " + phrases.Phrases[j].Phrase + `
` pageContent += "" fmt.Fprintf(w,pageContent) } func main() { ParseJSON() http.HandleFunc("/", requestHandler) http.HandleFunc("/answer/", answerHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }