net/url.ParseQuery în Go

Desface un text de forma a=1&b=2 într-un url.Values și raportează prima eroare de codare.

Sintaxă
func ParseQuery(query string) (Values, error)

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&notificari=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 din https://x.ro/?a numele primului parametru. Desface întâi adresa cu url.Parse și folosește u.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ă.