Ce face net/url.URL.Query
u.Query() citește u.RawQuery (de exemplu q=go+json&pagina=2), decodează valorile și returnează un url.Values. Valorile se citesc cu Get; un parametru care apare de mai multe ori are toate valorile în slice-ul lui.
Rezultatul este o copie: dacă modifici valorile, adresa nu se schimbă până nu scrii înapoi u.RawQuery = q.Encode(). Perechile greșit codate sunt ignorate în tăcere; dacă vrei eroarea, folosește url.ParseQuery(u.RawQuery). Pe server, r.URL.Query() citește parametrii unei cereri.
Ce returnează
Un url.Values nou.
Exemple
Exemplul 1: Parametrii unei căutări
package main
import (
"fmt"
"net/url"
)
func main() {
u, _ := url.Parse("https://magazin.ro/cauta?q=cafea+boabe&pret_max=80&culoare=negru&culoare=maro")
q := u.Query()
fmt.Println("Căutare: ", q.Get("q"))
fmt.Println("Preț max:", q.Get("pret_max"))
fmt.Println("Culori: ", q["culoare"])
fmt.Println("Pagina: ", q.Get("pagina") == "", "(lipsește)")
}
Rezultat
Căutare: cafea boabe
Preț max: 80
Culori: [negru maro]
Pagina: true (lipsește)
Exemplul 2: Schimbarea unui parametru
Modificăm copia și o scriem înapoi în RawQuery; Encode sortează cheile.
package main
import (
"fmt"
"net/url"
)
func paginaUrmatoare(adresa string) string {
u, err := url.Parse(adresa)
if err != nil {
return ""
}
q := u.Query()
q.Set("pagina", "3")
u.RawQuery = q.Encode()
return u.String()
}
func main() {
fmt.Println(paginaUrmatoare("https://dexblog.ro/cauta?q=go&pagina=2"))
fmt.Println(paginaUrmatoare("https://dexblog.ro/arhiva"))
}
Rezultat
https://dexblog.ro/cauta?pagina=3&q=go
https://dexblog.ro/arhiva?pagina=3
Greșeli frecvente
- Modifici
u.Query()și te aștepți ca adresa să se schimbe. Este o copie; scrieu.RawQuery = q.Encode(). - Folosești
u.Query()într-o buclă strânsă pe aceeași adresă: o desface de fiecare dată. Păstrează rezultatul într-o variabilă.
Comenzi înrudite
net/url.Values: Parametrii unui query string sau ai unui formular: Get, Set, Add, Del, Has și Encode (codare sortată după cheie).net/url.ParseQuery: Desface un text de forma a=1&b=2 într-un url.Values și raportează prima eroare de codare.net/url.Parse: Desface o adresă URL în părțile ei (schemă, host, cale, query, fragment); String() o reconstruiește.net/http.Request.FormValue: FormValue citește un câmp dintr-un formular sau din query string; ParseForm le citește pe toate în r.Form și r.PostForm.