Ce face net/url.ParseQuery
url.ParseQuery("nume=Ana&oras=Ia%C8%99i") returnează un url.Values cu valorile decodate. Primește doar partea de după ?, nu adresa întreagă. Este util pentru corpuri de formular citite manual, pentru șiruri salvate în baze de date sau pentru răspunsuri de API în acest format.
Spre deosebire de u.Query(), returnează eroarea primei perechi greșit codate (de exemplu %zz sau un ;), dar le păstrează pe cele bune în rezultat.
Parametri
| Parametru | Descriere |
|---|---|
query |
Textul de tip query, fără ?. |
Ce returnează
Valorile (url.Values) și prima eroare întâlnită, sau nil.
Exemple
Exemplul 1: Text valid și text cu greșeli
package main
import (
"fmt"
"net/url"
)
func main() {
v, err := url.ParseQuery("nume=Ana+Pop&oras=Ia%C8%99i&cos=paine&cos=lapte")
fmt.Println(v, err)
fmt.Println("Oraș:", v.Get("oras"))
v, err = url.ParseQuery("a=1&b=%zz&c=3")
fmt.Println(v, "| eroare:", err)
}
Rezultat
map[cos:[paine lapte] nume:[Ana Pop] oras:[Iași]] <nil>
Oraș: Iași
map[a:[1] c:[3]] | eroare: invalid URL escape "%zz"
Exemplul 2: Setări salvate ca text
package main
import (
"fmt"
"net/url"
"strconv"
)
func main() {
salvat := "tema=intunecata&marime_font=16¬ificari=da"
setari, err := url.ParseQuery(salvat)
if err != nil {
fmt.Println(err)
return
}
font, _ := strconv.Atoi(setari.Get("marime_font"))
fmt.Println("Tema:", setari.Get("tema"))
fmt.Println("Font mai mare:", font+2)
fmt.Println("Notificări:", setari.Get("notificari") == "da")
}
Rezultat
Tema: intunecata
Font mai mare: 18
Notificări: true
Greșeli frecvente
- Dai adresa întreagă:
url.ParseQuery("https://x.ro/?a=1")face dinhttps://x.ro/?anumele primului parametru. Desface întâi adresa cuurl.Parseși foloseșteu.RawQuery.
Comenzi înrudite
net/url.URL.Query: Desface partea de după „?” a unei adrese într-un url.Values (map de la nume la valori).net/url.Values: Parametrii unui query string sau ai unui formular: Get, Set, Add, Del, Has și Encode (codare sortată după cheie).net/url.QueryEscape: QueryEscape codează un text pentru query string (spațiu → +), PathEscape pentru o bucată de cale (spațiu → %20); QueryUnescape decodează.