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

Go développement linguistique du système de cuisson porte-à-porte : comment mettre en œuvre la fonction de gestion des adresses des utilisateurs ?

WBOY
Libérer: 2023-11-01 12:45:11
original
660 Les gens l'ont consulté

Go développement linguistique du système de cuisson porte-à-porte : comment mettre en œuvre la fonction de gestion des adresses des utilisateurs ?

Go développement linguistique du système de cuisine porte-à-porte : Comment implémenter la fonction de gestion des adresses des utilisateurs ?

Introduction :
Avec la promotion d'une vie trépidante, de plus en plus de personnes choisissent de commander des plats à emporter à la maison ou de réserver des services de cuisine à domicile pour résoudre le problème de la faim. Le système de cuisson en porte-à-porte est apparu au fur et à mesure que les temps l'exigeaient, offrant aux utilisateurs une option pratique et rapide pour manger sainement. Dans ce système, il est très important d'implémenter la fonction de gestion des adresses des utilisateurs. Cet article présentera en détail comment implémenter cette fonction à l'aide du langage Go.

1. Conception de la base de données
Tout d'abord, nous devons concevoir une table de base de données pour enregistrer les informations d'adresse de l'utilisateur. Dans ce tableau, nous devons inclure au moins les champs suivants :

  • ID utilisateur : utilisé pour associer la table utilisateur
  • Nom du destinataire
  • Numéro de téléphone portable
  • Province
  • Ville
  • District/Comté
  • Adresse détaillée
  • Indicateur d'adresse par défaut : utilisé pour identifier si l'adresse est l'adresse par défaut de l'utilisateur

2. Définition du modèle de données
Dans le langage Go, nous pouvons utiliser une structure pour définir un modèle de données pour représenter les informations d'adresse de l'utilisateur. Voici un exemple de code :

type Address struct {
    UserID       int    `json:"user_id"`
    ReceiverName string `json:"receiver_name"`
    PhoneNumber  string `json:"phone_number"`
    Province     string `json:"province"`
    City         string `json:"city"`
    District     string `json:"district"`
    Detail       string `json:"detail"`
    IsDefault    bool   `json:"is_default"`
}
Copier après la connexion

Dans cette structure, nous utilisons la balise json pour spécifier les noms de champs lors de la sérialisation et de la désérialisation JSON. json标签来指定JSON序列化和反序列化时的字段名称。

三、数据库操作
接下来,我们需要封装一些数据库操作的方法,以实现对用户地址信息的增删改查。以下是一个简单的示例代码:

// 添加用户地址
func AddAddress(address Address) error {
    // 连接数据库
    db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/mydb")
    if err != nil {
        return err
    }
    defer db.Close()

    // 执行插入操作
    _, err = db.Exec("INSERT INTO address(user_id, receiver_name, phone_number, province, city, district, detail, is_default) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", address.UserID, address.ReceiverName, address.PhoneNumber, address.Province, address.City, address.District, address.Detail, address.IsDefault)
    if err != nil {
        return err
    }

    return nil
}

// 根据用户ID查询地址列表
func GetAddressesByUserID(userID int) ([]Address, error) {
    // 连接数据库
    db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/mydb")
    if err != nil {
        return nil, err
    }
    defer db.Close()

    // 执行查询操作
    rows, err := db.Query("SELECT * FROM address WHERE user_id = ?", userID)
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    // 解析查询结果
    addresses := []Address{}
    for rows.Next() {
        var address Address
        err := rows.Scan(&address.UserID, &address.ReceiverName, &address.PhoneNumber, &address.Province, &address.City, &address.District, &address.Detail, &address.IsDefault)
        if err != nil {
            return nil, err
        }
        addresses = append(addresses, address)
    }

    return addresses, nil
}

// 删除用户地址
func DeleteAddress(userID int, addressID int) error {
    // 连接数据库
    db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/mydb")
    if err != nil {
        return err
    }
    defer db.Close()

    // 执行删除操作
    _, err = db.Exec("DELETE FROM address WHERE user_id = ? AND id = ?", userID, addressID)
    if err != nil {
        return err
    }

    return nil
}
Copier après la connexion

在这些方法中,我们使用了Go语言的database/sql包来连接数据库并执行SQL语句。

四、接口设计
最后,我们需要设计一些接口,以便用户可以通过HTTP请求来操作地址信息。以下是一个简单的示例代码:

// 添加用户地址
func AddAddressHandler(w http.ResponseWriter, r *http.Request) {
    // 解析请求体
    decoder := json.NewDecoder(r.Body)
    var address Address
    err := decoder.Decode(&address)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 调用数据库操作方法
    err = AddAddress(address)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回成功响应
    w.WriteHeader(http.StatusOK)
}

// 查询用户地址列表
func GetAddressesHandler(w http.ResponseWriter, r *http.Request) {
    // 解析URL参数
    userID, err := strconv.Atoi(r.URL.Query().Get("user_id"))
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 调用数据库操作方法
    addresses, err := GetAddressesByUserID(userID)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回JSON响应
    w.Header().Set("Content-Type", "application/json")
    encoder := json.NewEncoder(w)
    err = encoder.Encode(addresses)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}

// 删除用户地址
func DeleteAddressHandler(w http.ResponseWriter, r *http.Request) {
    // 解析URL参数
    userID, err := strconv.Atoi(r.URL.Query().Get("user_id"))
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    addressID, err := strconv.Atoi(r.URL.Query().Get("address_id"))
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 调用数据库操作方法
    err = DeleteAddress(userID, addressID)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回成功响应
    w.WriteHeader(http.StatusOK)
}

// 注册HTTP路由
func RegisterHandlers() {
    http.HandleFunc("/address/add", AddAddressHandler)
    http.HandleFunc("/address/get", GetAddressesHandler)
    http.HandleFunc("/address/delete", DeleteAddressHandler)
}
Copier après la connexion

在这些接口中,我们使用了Go语言的net/http

3. Opérations de base de données

Ensuite, nous devons encapsuler certaines méthodes de fonctionnement de la base de données pour ajouter, supprimer, modifier et vérifier les informations d'adresse de l'utilisateur. Voici un exemple de code simple :
rrreee

Dans ces méthodes, nous utilisons le package database/sql du langage Go pour nous connecter à la base de données et exécuter des instructions SQL. 🎜🎜4. Conception d'interface🎜Enfin, nous devons concevoir certaines interfaces afin que les utilisateurs puissent exploiter les informations d'adresse via des requêtes HTTP. Voici un exemple de code simple : 🎜rrreee🎜Dans ces interfaces, nous utilisons le package net/http du langage Go pour gérer les requêtes et les réponses HTTP, et implémentons l'adresse en appelant la méthode de fonctionnement de la base de données. Vérifiez les ajouts et suppressions d’informations. 🎜🎜Conclusion : 🎜À travers les exemples de code ci-dessus, nous pouvons voir qu'il est relativement simple et efficace d'utiliser le langage Go pour développer la fonction de gestion des adresses des utilisateurs du système de cuisson porte-à-porte. En concevant correctement la structure de la base de données, en définissant le modèle de données, en encapsulant les méthodes de fonctionnement de la base de données et en concevant des interfaces raisonnables, nous pouvons facilement gérer et exploiter les informations d'adresse des utilisateurs. J'espère que cet article pourra vous être utile dans la mise en œuvre de la fonction de gestion des adresses des utilisateurs lors du développement d'un système de cuisson porte-à-porte. 🎜

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!