>백엔드 개발 >Golang >Go 언어를 사용하여 주문 시스템의 레스토랑 예약 기능을 개발하는 방법

Go 언어를 사용하여 주문 시스템의 레스토랑 예약 기능을 개발하는 방법

王林
王林원래의
2023-11-01 17:18:57595검색

Go 언어를 사용하여 주문 시스템의 레스토랑 예약 기능을 개발하는 방법

주문 시스템의 레스토랑 예약 기능을 개발하려면 Go 언어를 사용하는 방법 구체적인 코드 예제가 필요합니다.

레스토랑 예약 기능은 고객이 식사 시간을 예약할 수 있도록 하는 현대 주문 시스템에서 매우 중요한 부분입니다. 레스토랑을 미리 방문하여 효과적으로 피할 수 있습니다. 이를 통해 테이블을 기다릴 필요가 없어져 고객의 식사 경험이 향상됩니다. 이번 글에서는 Go 언어를 사용해 간단한 레스토랑 예약 기능을 개발해보겠습니다.

먼저 레스토랑 정보와 예약 주문 데이터를 저장할 데이터베이스를 만들어야 합니다. MySQL을 데이터베이스 관리 시스템으로 사용하여 "restaurant"라는 데이터베이스를 생성하고 "restaurants" 및 "reservations"라는 두 개의 테이블을 생성할 수 있습니다.

restaurants 테이블의 구조는 다음과 같습니다.

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
);

예약 테이블의 구조는 다음과 같습니다.

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)
);

다음으로 Go 언어를 사용하여 주문 시스템의 레스토랑 예약 기능을 개발하겠습니다. 먼저 레스토랑 이름, 주소, 수용 인원, 이용 가능 기간 등 레스토랑 정보를 나타내는 레스토랑 구조를 만들어야 합니다.

type Restaurant struct {
    ID               int
    Name             string
    Address          string
    Capacity         int
    AvailableTimeStart time.Time
    AvailableTimeEnd   time.Time
}

또한 예약된 레스토랑 ID, 고객 이름, 예약 시간 등을 포함한 예약 주문 정보를 나타내는 예약 구조를 만들어야 합니다.

type Reservation struct {
    ID               int
    RestaurantID     int
    GuestName        string
    ReservationTime  time.Time
}

다음으로 모든 레스토랑 조회, 이용 가능한 레스토랑 조회, 예약 주문 조회, 예약 주문 추가 등 일부 데이터베이스 운영 기능을 구현해야 합니다.

먼저 데이터베이스 연결을 저장하기 위해 db 변수를 만듭니다.

var db *sql.DB

메인 함수에서는 데이터베이스 연결을 열어야 합니다.

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))
}

다음으로 몇 가지 데이터베이스 작업 기능을 구현해 보겠습니다.

먼저 모든 음식점을 조회하는 기능은 다음과 같습니다.

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)
}

다음으로 이용 가능한 음식점을 조회하는 기능은 다음과 같습니다.

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)
}

그다음 예약 주문을 조회하는 기능은 다음과 같습니다.

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)
}

마지막으로 예약 주문을 추가하는 기능은 다음과 같습니다:

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)
}

위의 단계를 통해 Go 언어를 사용한 주문 시스템을 개발하는 레스토랑 예약 기능을 완성했습니다. Postman과 같은 도구를 사용하여 이러한 HTTP 인터페이스를 테스트할 수 있으며 프런트 엔드 개발을 위한 해당 데이터 인터페이스를 제공할 수도 있습니다. 물론 이는 단순한 예시일 뿐 실제 개발에서는 구체적인 필요에 따라 개선되고 완성도가 높아져야 한다.

위 내용은 Go 언어를 사용하여 주문 시스템의 레스토랑 예약 기능을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.