I'm learning Golang because my company asked me to start using it for backend. I'm a fairly new programmer and I have a problem testing the tracking of a concrete api endpoint.
This is my main.go file:
package main
import (
"encoding/json"
"fmt"
"html/template"
"log"
"net/http"
"strconv"
"strings"
"time"
)
type Resultado struct {
Suma float64
}
type Llamada struct {
Metodo string
When string
Path string
Consulta string
}
type FormData struct {
Title string
ErrMsg string
Llamadas []Llamada
}
var LlamadasArr []Llamada
func main() {
http.HandleFunc("/", inicio)
http.HandleFunc("/api/sum", sum)
http.HandleFunc("/llamadas", llamadas)
http.HandleFunc("/formulario", sumForm)
if err := http.ListenAndServe(":80", nil); err == nil {
panic(err)
}
}
func llamadas(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("./public/templates/llamadas.html", "./public/templates/partials/header.html")
t.Execute(w, FormData{"Llamadas API Suma", "No se realizaron llamadas a la API durante esta sesión.", LlamadasArr})
}
func sumForm(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("./public/templates/formulario.html", "./public/templates/partials/header.html")
t.Execute(w, struct {
Title string
Msg string
Msg2 string
}{"Formulario Suma", "Consulta el historial de llamadas a la API", "Introduce los números separados por comas"})
}
func inicio(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("./public/templates/index.html", "./public/templates/partials/header.html")
t.Execute(w, struct {
Title string
}{"Inicio"})
}
func sum(w http.ResponseWriter, r *http.Request) {
dt := time.Now()
llamada := Llamada{
Metodo: r.Method,
When: dt.Format("01-02-2006 15:04:05"),
Path: r.URL.Path,
Consulta: r.URL.RawQuery,
}
LlamadasArr = append(LlamadasArr, llamada)
query := r.URL.Query()["numeros"]
splitted := strings.Split(query[0], ",")
sum := 0.0
for i := 0; i < len(splitted); i++ {
if num, err := strconv.ParseFloat(splitted[i], 64); err == nil {
sum += num
}
}
resultado := Resultado{
Suma: sum,
}
var jsonData []byte
jsonData, err := json.MarshalIndent(resultado, "", " ")
if err != nil {
log.Println(err)
}
fmt.Fprintln(w, string(jsonData))
}
My testing file:
func TestCalls(t *testing.T) {
io.WriteString(os.Stdout, ">Probando REGISTRO DE LLAMADAS A SUMA\n")
count := 0
for count < 22 {
http.Get("http://localhost/api/sum?numeros=1")
io.WriteString(os.Stdout, fmt.Sprint(len(LlamadasArr)))
count++
}
}
Output is always 0, I tested the value in the main file and it's changing. I'm a bit lost and I would appreciate any help. Thanks in advance.
Aucun commentaire:
Enregistrer un commentaire