Jestem całkiem nowym użytkownikiem Go i nie do końca rozumiem wszystko. W wielu nowoczesnych językach Node.js, Angular, jQuery, PHP można wykonać żądanie GET z dodatkowymi parametrami ciągu zapytania.Wykonuję żądanie GET i buduję Querystringa
Robienie tego w Go nie jest tak proste, jak się wydaje, i nie mogę tego naprawdę rozgryźć. Naprawdę nie chcę łączyć ciągów dla każdej z żądań, które chcę wykonać.
Oto przykładowy skrypt:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
req.Header.Add("Accept", "application/json")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Errored when sending request to the server")
return
}
defer resp.Body.Close()
resp_body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.Status)
fmt.Println(string(resp_body))
}
W tym przykładzie widać nie jest URL, który wymaga zmiennej GET api_key z klucz API jako wartość. Problem polega na tym, że staje się to trudne w postaci:
req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey", nil)
Czy istnieje sposób na dynamiczne budowanie tego łańcucha zapytania? W tej chwili będę musiał złożyć adres URL przed tym krokiem, aby uzyskać prawidłową odpowiedź.
Więc co jest nie tak z złączenie ciąg? –
Nic nie przypuszczam, ale to naprawdę nie jest eleganckie rozwiązanie, tylko myślę, że jest lepszy sposób robienia rzeczy w Go. Widzisz zmiany akcji, metodę, a następnie musisz wszystko połączyć. –
Możesz użyć ['url.Values'] (https://golang.org/pkg/net/url/#Values) 's [' Encode'] (https://golang.org/pkg/net/url /#Values.Encode) metoda. Możesz również użyć ['URL.String'] (https://golang.org/pkg/net/url/#URL.String), aby zbudować cały URL. –