如何使用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語言環境,並且設定好GOPATH。
在命令列中執行以下指令,建立一個新的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結構體,用來表示回饋訊息,並提供了插入新回饋和獲取所有回饋的方法。
在專案的根目錄下建立一個名為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語言編寫了一個簡單的上門做菜系統中的使用者回饋模組。你可以根據實際需求進行擴展和優化。希望本文對您有幫助!
以上是如何使用Go語言編寫上門做菜系統中的使用者回饋模組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!