Practical Examples
Scénarios de paramètres de requête dans le monde réel
1. Filtrage de produits e-commerce
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
}
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)
}
Techniques d'analyse avancée des requêtes
Gestion de requêtes complexes
| Scénario |
Exemple de requête |
Technique d'analyse |
| Sélection multiple |
?tags=golang&tags=web |
Gestion de plusieurs valeurs |
| Paramètres imbriqués |
?filter[price]=50 |
Analyse complexe |
| Indicateurs booléens |
?active=true |
Conversion de type |
Exemple de recherche et de filtrage
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
}
Considérations de sécurité
Prévention de l'injection de requête
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
}
- Mettez en cache les requêtes analysées
- Utilisez un minimum de conversions de type
- Validez les entrées tôt
- Implémentez un filtrage efficace
Chez LabEx, nous mettons l'accent sur l'écriture d'un code d'analyse de requête propre et efficace qui équilibre la fonctionnalité et les performances.