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?
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.
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
);
Make sure that the Go language environment has been installed and GOPATH is set.
Execute the following command on the command line to create a new Go module:
go mod init feedback
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.
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.
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.
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!