GoLang Api läd response nicht?

1 Antwort

Das Problem ist dass du in der apiFunc funktion die wg.Wait() funktion aufrufst. Dadurch kann die Anfrage verzögert werden.

Hier habe ich es korrigiert:

var loginChannel = make(chan string)

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

  go func() {

    time.Sleep(3 * time.Second) // Simuliert den Login-Prozess

    loginChannel <- "Daten"

  }()

  http.Redirect(w, r, "http://localhost:8080", http.StatusFound)

}

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

  vars := mux.Vars(r)

  ques := vars["category"]

   

  switch ques {

  case "Daten":

    loginData := <-loginChannel

     

    json.NewEncoder(w).Encode(loginData)

  }

}

Woher ich das weiß:Studium / Ausbildung – Informatikstudium
Yoshi1029 
Fragesteller
 04.04.2024, 15:40

Danke dir, das wäre natürlich eine Möglichkeit, das Ziel der API Funktion und damit auch der Grund wieso ich das Ganze probiert hab mit Wg's umzusetzen ist aber, dass die Logindaten DIREKT abgerufen werden sobald der Login abgeschlossen ist - egal wie lange dieser dauert. Durch die einfache Umsetzung mit einem timeout ist das Ganze ja so nicht gegeben...

0
MAckermann  04.04.2024, 15:42
@Yoshi1029

Ok dann nutzen wir ein Syncron Muster in einem Kanal:
var loginChannel = make(chan string)

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

  go func() {

    time.Sleep(3 * time.Second) // Simuliert den Login-Prozess

    loginChannel <- "Daten"

  }()

  http.Redirect(w, r, "http://localhost:8080", http.StatusFound)

}

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

  vars := mux.Vars(r)

  ques := vars["category"]

   

  switch ques {

  case "Daten":

    loginData := <-loginChannel

     

    json.NewEncoder(w).Encode(loginData)

  }

}

0
MAckermann  04.04.2024, 16:13
@Yoshi1029

Sry hier der richtige:
var loginChannel = make(chan string)

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

  go func() {

    // Verarbeitung von Daten

    time.Sleep(3 * time.Second) // Simuliert den Login-Prozess

    loginChannel <- "Daten"

  }()

  http.Redirect(w, r, "http://localhost:8080", http.StatusFound)

}

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

  vars := mux.Vars(r)

  ques := vars["category"]

   

  switch ques {

  case "Daten":

    // Hier wird auf den Login gewartet

    loginData := <-loginChannel

     

    // Verarbeitung von Daten

    json.NewEncoder(w).Encode(loginData)

  }

}

0