Praktische Beispiele
Echtwelt-Szenarien für Abfrageparameter
1. Filterung von E-Commerce-Produkten
func filterProducts(query url.Values) []Product {
var products []Product
category := query.Get("category")
minPrice := query.Get("min_price")
maxPrice := query.Get("max_price")
// Apply dynamic filtering
for _, product := range allProducts {
if category != "" && product.Category != category {
continue
}
if minPrice != "" {
min, _ := strconv.Atoi(minPrice)
if product.Price < min {
continue
}
}
products = append(products, product)
}
return products
}
2. Paginierung von API-Anfragen
graph LR
A[Query Parameters] --> B[Page Number]
A --> C[Results Per Page]
A --> D[Offset Calculation]
func getPaginatedResults(query url.Values) []Result {
page := query.Get("page")
limit := query.Get("limit")
pageNum, _ := strconv.Atoi(page)
resultsPerPage, _ := strconv.Atoi(limit)
if pageNum == 0 {
pageNum = 1
}
if resultsPerPage == 0 {
resultsPerPage = 10
}
offset := (pageNum - 1) * resultsPerPage
return fetchResults(offset, resultsPerPage)
}
Fortgeschrittene Techniken zum Parsen von Abfragen
Umgang mit komplexen Abfragen
Szenario |
Abfragebeispiel |
Parsing-Technik |
Mehrfachauswahl |
?tags=golang&tags=web |
Umgang mit mehreren Werten |
Verschachtelte Parameter |
?filter[price]=50 |
Komplexes Parsing |
Boolesche Flags |
?active=true |
Typkonvertierung |
Beispiel für Suche und Filterung
type SearchFilter struct {
Keyword string
Category string
MinPrice float64
MaxPrice float64
SortBy string
}
func parseSearchQuery(query url.Values) SearchFilter {
filter := SearchFilter{
Keyword: query.Get("q"),
Category: query.Get("category"),
MinPrice: parseFloat(query.Get("min_price")),
MaxPrice: parseFloat(query.Get("max_price")),
SortBy: query.Get("sort"),
}
return filter
}
func parseFloat(value string) float64 {
price, err := strconv.ParseFloat(value, 64)
if err != nil {
return 0
}
return price
}
Sicherheitsüberlegungen
Verhinderung von Query-Injection
func sanitizeQueryParams(query url.Values) url.Values {
sanitized := url.Values{}
for key, values := range query {
// Implement custom sanitization logic
sanitizedValues := []string{}
for _, value := range values {
cleanValue := sanitizeValue(value)
sanitizedValues = append(sanitizedValues, cleanValue)
}
sanitized[key] = sanitizedValues
}
return sanitized
}
Tipps zur Leistung
- Zwischenspeichern von geparsten Abfragen
- Minimale Typkonvertierungen verwenden
- Eingaben frühzeitig validieren
- Effiziente Filterung implementieren
Bei LabEx legen wir Wert auf die Schreibung von sauberem und effizientem Code zum Parsen von Abfragen, der Funktionalität und Leistung in Balance bringt.