How to use Go language to write the user feedback module in the door-to-door cooking system?

PHPz
Release: 2023-11-01 16:36:33
Original
1099 people have browsed it

How to use Go language to write the user feedback module in the door-to-door cooking system?

How to use Go language to write the user feedback module in the door-to-door cooking system?

With the rise of takeout and door-to-door services, more and more users choose to enjoy delicious food at home. For door-to-door cooking services, user feedback is particularly important, which can help improve service quality and user satisfaction. This article will introduce how to use Go language to write the user feedback module in the door-to-door cooking system, and provide specific code examples.

  1. Database design and creation

First, we need to design a database to store user feedback information. Suppose we have a table named feedback, which contains the following fields: id (auto-incrementing primary key), userId (user ID), content (feedback content), createTime (creation time).

Use the following SQL statement to create the feedback table:

CREATE TABLE feedback (

id INT AUTO_INCREMENT PRIMARY KEY,
userId INT NOT NULL,
content TEXT NOT NULL,
createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
Copy after login

);

  1. Build the Go language environment

Make sure that the Go language environment has been installed and GOPATH is set.

  1. Create Go module

Execute the following command on the command line to create a new Go module:

go mod init feedback

  1. Create database connection

Create a file named db.go in the root directory of the project and add the following code:

package main

import (

"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
Copy after login

)

func ConnectDB() (*sql.DB, error) {

db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/feedback")
if err != nil {
    return nil, fmt.Errorf("failed to connect to database: %v", err)
}

err = db.Ping()
if err != nil {
    return nil, fmt.Errorf("failed to ping database: %v", err)
}

return db, nil
Copy after login

}

Replace the "root Replace ":password" with your database username and password, and "feedback" with the name of the database you created.

  1. Create feedback model

Create a file named feedback.go in the root directory of the project and add the following code:

package main

import (

"database/sql"
"fmt"
"time"
Copy after login

)

type Feedback struct {

ID        int
UserID    int
Content   string
CreateTime time.Time
Copy after login

}

func InsertFeedback(db sql.DB , feedback Feedback) error {

stmt, err := db.Prepare("INSERT INTO feedback(userId, content) VALUES(?, ?)")
if err != nil {
    return fmt.Errorf("failed to prepare insert statement: %v", err)
}
defer stmt.Close()

_, err = stmt.Exec(feedback.UserID, feedback.Content)
if err != nil {
    return fmt.Errorf("failed to execute insert statement: %v", err)
}

return nil
Copy after login

}

func GetFeedbacks(db sql.DB) ([]Feedback, error) {

rows, err := db.Query("SELECT * FROM feedback")
if err != nil {
    return nil, fmt.Errorf("failed to execute query: %v", err)
}
defer rows.Close()

feedbacks := make([]*Feedback, 0)
for rows.Next() {
    feedback := &Feedback{}
    err := rows.Scan(&feedback.ID, &feedback.UserID, &feedback.Content, &feedback.CreateTime)
    if err != nil {
        return nil, fmt.Errorf("failed to scan feedback: %v", err)
    }
    feedbacks = append(feedbacks, feedback)
}

return feedbacks, nil
Copy after login

}

A Feedback structure is defined here to represent feedback information and provides methods for inserting new feedback and obtaining all feedback.

  1. Create HTTP interface

Create a file named main.go in the root directory of the project and add the following code:

package main

import (

"encoding/json"
"log"
"net/http"
Copy after login

)

func main() {

db, err := ConnectDB()
if err != nil {
    log.Fatalf("failed to connect to database: %v", err)
}
defer db.Close()

http.HandleFunc("/feedback", func(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case http.MethodGet:
        feedbacks, err := GetFeedbacks(db)
        if err != nil {
            log.Printf("failed to get feedbacks: %v", err)
            http.Error(w, "Internal server error", http.StatusInternalServerError)
            return
        }

        json.NewEncoder(w).Encode(feedbacks)
    case http.MethodPost:
        var feedback Feedback
        err := json.NewDecoder(r.Body).Decode(&feedback)
        if err != nil {
            log.Printf("failed to decode feedback: %v", err)
            http.Error(w, "Bad request", http.StatusBadRequest)
            return
        }

        err = InsertFeedback(db, &feedback)
        if err != nil {
            log.Printf("failed to insert feedback: %v", err)
            http.Error(w, "Internal server error", http.StatusInternalServerError)
            return
        }

        w.WriteHeader(http.StatusCreated)
    default:
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
    }
})

log.Println("Server listening on :8000")
log.Fatal(http.ListenAndServe(":8000", nil))
Copy after login

}

A file named /feedback is created here HTTP interface supports GET method for obtaining all feedback information and POST method for inserting new feedback information.

  1. Start the service

Execute the following command in the command line to start the service:

go run main.go

Now, You can use Postman or other HTTP clients to send GET and POST requests to test the user feedback module of your home cooking system.

Through the above steps, we used Go language to write a simple user feedback module in the door-to-door cooking system. You can expand and optimize according to actual needs. Hope this article helps you!

The above is the detailed content of How to use Go language to write the user feedback module in the door-to-door cooking system?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!