Home  >  Article  >  Backend Development  >  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?

PHPz
PHPzOriginal
2023-11-01 16:36:331120browse

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

);

  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"

)

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

}

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"

)

type Feedback struct {

ID        int
UserID    int
Content   string
CreateTime time.Time

}

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

}

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

}

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"

)

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))

}

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!

Statement:
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