如何使用Go语言编写上门做菜系统中的用户反馈模块?
随着外卖和上门服务的兴起,越来越多的用户选择在家享受美食。而对于上门做菜服务来说,用户的反馈意见尤为重要,可以帮助提升服务质量和用户满意度。本文将介绍如何使用Go语言编写上门做菜系统中的用户反馈模块,并提供具体的代码示例。
- 数据库设计与创建
首先,我们需要设计数据库来存储用户的反馈信息。假设我们有一个名为feedback的表,包含以下字段:id(自增主键),userId(用户ID),content(反馈内容),createTime(创建时间)。
使用如下SQL语句创建feedback表:
CREATE TABLE feedback (
id INT AUTO_INCREMENT PRIMARY KEY,
userId INT NOT NULL,
content TEXT NOT NULL,
createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 搭建Go语言环境
确保已经安装Go语言环境,并设置好GOPATH。
- 创建Go模块
在命令行中执行以下命令,创建一个新的Go模块:
go mod init feedback
- 创建数据库连接
在项目的根目录下创建一个名为db.go的文件,并添加以下代码:
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
}
将其中的"root:password"替换为你的数据库用户名和密码,"feedback"替换为你创建的数据库名。
- 创建反馈模型
在项目的根目录下创建一个名为feedback.go的文件,并添加以下代码:
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
}
这里定义了一个Feedback结构体,用来表示反馈信息,并提供了插入新反馈和获取所有反馈的方法。
- 创建HTTP接口
在项目的根目录下创建一个名为main.go的文件,并添加以下代码:
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))
}
这里创建了一个名为/feedback的HTTP接口,支持GET方法用于获取所有反馈信息,POST方法用于插入新的反馈信息。
- 启动服务
在命令行中执行以下命令,启动服务:
go run main.go
现在,你可以使用Postman或其他HTTP客户端发送GET和POST请求来测试你的上门做菜系统的用户反馈模块了。
通过以上步骤,我们使用Go语言编写了一个简单的上门做菜系统中的用户反馈模块。你可以根据实际需求进行扩展和优化。希望本文对您有所帮助!