首頁  >  文章  >  後端開發  >  如何使用Go語言編寫上門做菜系統中的使用者回饋模組?

如何使用Go語言編寫上門做菜系統中的使用者回饋模組?

PHPz
PHPz原創
2023-11-01 16:36:331082瀏覽

如何使用Go語言編寫上門做菜系統中的使用者回饋模組?

如何使用Go語言編寫上門做菜系統中的使用者回饋模組?

隨著外送和上門服務的興起,越來越多的用戶選擇在家中享受美食。而對於上門做菜服務來說,使用者的回饋意見尤其重要,可以幫助提升服務品質和使用者滿意度。本文將介紹如何使用Go語言編寫上門做菜系統中的使用者回饋模組,並提供具體的程式碼範例。

  1. 資料庫設計與建立

首先,我們需要設計資料庫來儲存使用者的回饋資訊。假設我們有一個名為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

);

  1. 建置Go語言環境

確保已經安裝Go語言環境,並且設定好GOPATH。

  1. 建立Go模組

在命令列中執行以下指令,建立一個新的Go模組:

go mod init feedback

  1. 建立資料庫連線

在專案的根目錄下建立一個名為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"替換為你建立的資料庫名稱。

  1. 建立回饋模型

在專案的根目錄下建立一個名為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結構體,用來表示回饋訊息,並提供了插入新回饋和獲取所有回饋的方法。

  1. 建立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方法用於插入新的回饋資訊。

  1. 啟動服務

在命令列中執行以下命令,啟動服務:

go run main.go

現在,你可以使用Postman或其他HTTP客戶端發送GET和POST請求來測試你的上門做菜系統的用戶回饋模組了。

透過上述步驟,我們使用Go語言編寫了一個簡單的上門做菜系統中的使用者回饋模組。你可以根據實際需求進行擴展和優化。希望本文對您有幫助!

以上是如何使用Go語言編寫上門做菜系統中的使用者回饋模組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn