Maison > développement back-end > Golang > le corps du texte

format de paramètre de requête Golang

WBOY
Libérer: 2023-05-13 12:41:38
original
669 Les gens l'ont consulté

Dans Golang, nous devons souvent utiliser le protocole HTTP pour l'interaction des données. Dans les requêtes HTTP, les paramètres de requête sont très courants, le format correct des paramètres de requête est donc très important pour les développeurs backend.

Alors, quels sont les formats de paramètres de requête dans Golang ? Ce qui suit sera présenté en détail à travers des exemples de code.

Paramètres de demande de formulaire

Les paramètres de demande de formulaire sont l'un des formulaires de paramètres de demande les plus courants. Dans des scénarios normaux, nous utiliserons des requêtes POST pour envoyer des données de formulaire et les paramètres de la requête seront encapsulés dans le corps de la requête.

Ce qui suit est un exemple de code utilisant la bibliothèque net/http : net/http库的示例代码:

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
        username := r.PostFormValue("username")
        password := r.PostFormValue("password")
        log.Printf("username: %s, password: %s", username, password)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}
Copier après la connexion

在上面的示例中,我们通过r.PostFormValue()方法来获取表单中的参数。该方法会自动解析请求体中的表单参数,并将其存放到一个map中。

JSON形式请求参数

除了表单形式请求参数之外,还有一种常见的请求参数形式是JSON。在RESTful API中,JSON格式的请求参数已经成为了行业标准。

接下来我们通过encoding/json库来解析JSON格式的请求参数:

package main

import (
    "encoding/json"
    "log"
    "net/http"
)

type User struct {
    Username string `json:"username"`
    Password string `json:"password"`
}

func main() {
    http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
        var user User
        err := json.NewDecoder(r.Body).Decode(&user)
        if err != nil {
            http.Error(w, err.Error(), http.StatusBadRequest)
            return
        }
        log.Printf("username: %s, password: %s", user.Username, user.Password)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}
Copier après la connexion

在上面的示例中,我们首先定义了一个User结构体,然后使用json.NewDecoder()方法来解析请求体中的JSON数据。通过解析后,我们可以轻松地获取到用户提交的实际数据。

Query参数

Query参数是直接添加在URL后面的参数,例如:http://example.com/path?name=value。常见的查询操作都是通过Query参数来完成的。在Golang中,我们可以使用net/url库来解析Query参数:

package main

import (
    "log"
    "net/http"
    "net/url"
)

func main() {
    http.HandleFunc("/search", func(w http.ResponseWriter, r *http.Request) {
        query := r.URL.Query()
        name := query.Get("name")
        minPrice := query.Get("minPrice")
        maxPrice := query.Get("maxPrice")

        log.Printf("name: %s, minPrice: %s, maxPrice: %s", name, minPrice, maxPrice)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}
Copier après la connexion

在上面的示例中,我们使用r.URL.Query()方法获取到URL后面的查询参数,并使用Get()方法获取对应参数的值。

Path参数

Path参数是直接添加在URL路径中的参数,例如:http://example.com/path/{name}。在Golang中,我们可以使用net/http库配合正则表达式来获取Path参数:

package main

import (
    "log"
    "net/http"
    "regexp"
)

func main() {
    http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
        re := regexp.MustCompile(`/users/(d+)`)
        match := re.FindStringSubmatch(r.URL.Path)
        if match == nil {
            http.NotFound(w, r)
            return
        }

        id := match[1]
        log.Printf("user id: %s", id)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}
Copier après la connexion

在上面的示例中,我们使用正则表达式/users/(d+)来匹配URL路径中的数字,并通过FindStringSubmatch()rrreee

Dans l'exemple ci-dessus, nous utilisons la méthode r.PostFormValue() pour obtenir les paramètres sous la forme. Cette méthode analysera automatiquement les paramètres du formulaire dans le corps de la requête et les stockera dans une carte.

Paramètres de demande de formulaire JSON

En plus des paramètres de demande de formulaire, un autre formulaire de paramètre de demande courant est JSON. Dans les API RESTful, les paramètres de requête au format JSON sont devenus un standard de l'industrie. 🎜🎜Ensuite, nous utilisons la bibliothèque encoding/json pour analyser les paramètres de la requête au format JSON : 🎜rrreee🎜Dans l'exemple ci-dessus, nous définissons d'abord une structure Utilisateur, puis utilisons la méthode json.NewDecoder() pour analyser les données JSON dans le corps de la requête. Après analyse, nous pouvons facilement obtenir les données réelles soumises par l'utilisateur. 🎜🎜Paramètres de requête🎜🎜Les paramètres de requête sont des paramètres ajoutés directement après l'URL, par exemple : http://example.com/path?name=value. Les opérations de requête courantes sont effectuées via les paramètres de requête. Dans Golang, nous pouvons utiliser la bibliothèque net/url pour analyser les paramètres de requête : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons la méthode r.URL.Query() pour get Accédez au paramètre de requête derrière l'URL et utilisez la méthode Get() pour obtenir la valeur du paramètre correspondant. 🎜🎜Paramètre Path 🎜🎜Le paramètre Path est un paramètre ajouté directement au chemin de l'URL, par exemple : http://example.com/path/{name}. Dans Golang, nous pouvons utiliser la bibliothèque net/http avec des expressions régulières pour obtenir le paramètre Path : 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons l'expression régulière /users/(d+) pour faire correspondre les nombres dans le chemin de l'URL et obtenir le résultat correspondant via la méthode <code>FindStringSubmatch(). De cette façon, nous pouvons facilement obtenir le paramètre Path. 🎜🎜Résumé🎜🎜Ce qui précède sont les formats courants et des exemples de paramètres de requête dans Golang. En fonction de nos besoins réels, choisir le format de paramètre de requête approprié pour la transmission de données peut rendre notre application plus efficace et plus stable. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal