How to use Go language to develop the restaurant reservation function of the ordering system, specific code examples are needed
The restaurant reservation function is a very important part of the modern ordering system. It allows customers to reserve a dining time in the restaurant in advance, effectively avoiding waiting for a table and improving the customer's dining experience. In this article, we will use Go language to develop a simple restaurant reservation function.
First, we need to create a database to store restaurant information and reservation order data. We can use MySQL as the database management system, create a database named "restaurant", and create two tables in it called "restaurants" and "reservations".
The structure of the restaurants table is as follows:
CREATE TABLE restaurants ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL, capacity INT NOT NULL, available_time_start TIME NOT NULL, available_time_end TIME NOT NULL );
The structure of the reservations table is as follows:
CREATE TABLE reservations ( id INT PRIMARY KEY AUTO_INCREMENT, restaurant_id INT NOT NULL, guest_name VARCHAR(255) NOT NULL, reservation_time DATETIME NOT NULL, FOREIGN KEY (restaurant_id) REFERENCES restaurants(id) );
Next, we will use the Go language to develop the restaurant reservation function of the ordering system. First, we need to create a restaurant structure to represent the restaurant's information, including the restaurant's name, address, capacity, and available time periods.
type Restaurant struct { ID int Name string Address string Capacity int AvailableTimeStart time.Time AvailableTimeEnd time.Time }
We also need to create a reservation structure to represent the reservation order information, including the reserved restaurant ID, customer name, reservation time, etc.
type Reservation struct { ID int RestaurantID int GuestName string ReservationTime time.Time }
Next, we need to implement some database operation functions, including querying all restaurants, querying available restaurants, querying reservation orders, adding reservation orders, etc.
First, we create a db variable to store the database connection.
var db *sql.DB
In the main function, we need to open the database connection.
func main() { var err error db, err = sql.Open("mysql", "root:password@tcp(localhost:3306)/restaurant") if err != nil { log.Fatal(err) } defer db.Close() // 运行HTTP服务器 http.HandleFunc("/restaurants", getRestaurantsHandler) http.HandleFunc("/available-restaurants", getAvailableRestaurantsHandler) http.HandleFunc("/reservations", getReservationsHandler) http.HandleFunc("/reserve", addReservationHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
Next, let’s implement some database operation functions.
First, the function to query all restaurants is as follows:
func getRestaurantsHandler(w http.ResponseWriter, r *http.Request) { rows, err := db.Query("SELECT * FROM restaurants") if err != nil { log.Fatal(err) } defer rows.Close() var restaurants []Restaurant for rows.Next() { var restaurant Restaurant err := rows.Scan(&restaurant.ID, &restaurant.Name, &restaurant.Address, &restaurant.Capacity, &restaurant.AvailableTimeStart, &restaurant.AvailableTimeEnd) if err != nil { log.Fatal(err) } restaurants = append(restaurants, restaurant) } json.NewEncoder(w).Encode(restaurants) }
Next, the function to query available restaurants is as follows:
func getAvailableRestaurantsHandler(w http.ResponseWriter, r *http.Request) { currentTime := time.Now() rows, err := db.Query("SELECT * FROM restaurants WHERE available_time_start <= ? AND available_time_end >= ?", currentTime, currentTime) if err != nil { log.Fatal(err) } defer rows.Close() var restaurants []Restaurant for rows.Next() { var restaurant Restaurant err := rows.Scan(&restaurant.ID, &restaurant.Name, &restaurant.Address, &restaurant.Capacity, &restaurant.AvailableTimeStart, &restaurant.AvailableTimeEnd) if err != nil { log.Fatal(err) } restaurants = append(restaurants, restaurant) } json.NewEncoder(w).Encode(restaurants) }
Then, the function to query reservation orders is as follows:
func getReservationsHandler(w http.ResponseWriter, r *http.Request) { rows, err := db.Query("SELECT * FROM reservations") if err != nil { log.Fatal(err) } defer rows.Close() var reservations []Reservation for rows.Next() { var reservation Reservation err := rows.Scan(&reservation.ID, &reservation.RestaurantID, &reservation.GuestName, &reservation.ReservationTime) if err != nil { log.Fatal(err) } reservations = append(reservations, reservation) } json.NewEncoder(w).Encode(reservations) }
Finally, the function to add a reservation order is as follows:
func addReservationHandler(w http.ResponseWriter, r *http.Request) { var reservation Reservation err := json.NewDecoder(r.Body).Decode(&reservation) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } stmt, err := db.Prepare("INSERT INTO reservations (restaurant_id, guest_name, reservation_time) VALUES (?, ?, ?)") if err != nil { log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec(reservation.RestaurantID, reservation.GuestName, reservation.ReservationTime) if err != nil { log.Fatal(err) } w.WriteHeader(http.StatusOK) }
Through the above steps, we have completed the restaurant reservation function of using the Go language to develop the ordering system. We can use tools such as Postman to test these HTTP interfaces, and can also provide corresponding data interfaces for front-end development. Of course, this is just a simple example, and it needs to be improved and perfected according to specific needs in actual development.
The above is the detailed content of How to use Go language to develop the restaurant reservation function of the ordering system. For more information, please follow other related articles on the PHP Chinese website!