我有一个模型文件,其中有一个结构方法。我想在我的控制器中使用该方法。但它说“GetBookings 未由包模型声明”。我对 Golang 很陌生,可能这是一个愚蠢的问题,但我仍然坚持下去。如果有人可以纠正我的代码或者可以提供另一个选项如何在另一个文件中使用结构方法,将不胜感激。预先感谢。
控制器
package controllers
import (
"encoding/json"
"net/http"
"github.com/Coddyy/beautyfly/pkg/models"
)
func GetBookings(w http.ResponseWriter, r *http.Request) {
bookings, err := models.GetBookings()
res, _ := json.Marshal(bookings)
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(res)
}
型号
package models
import (
"database/sql"
"github.com/Coddyy/beautyfly/pkg/entities"
)
type BookingModel struct {
Db *sql.DB
}
func init() {
}
func (bookingModel *BookingModel) GetBookings() ([]entities.Booking, error) {
rows, err := bookingModel.Db.Query("SELECT * FROM bookings")
if err != nil {
return nil, err
} else {
bookings := []entities.Booking{}
for rows.Next() {
var id int64
var customer_ids string
var date string
var time string
var service_ids string
var comments string
err2 := rows.Scan(&id, &customer_ids, &date, &time, &service_ids, &comments)
if err2 != nil {
return nil, err2
} else {
booking := entities.Booking{id, customer_ids, date, time, service_ids,
comments}
bookings = append(bookings, booking)
}
}
return bookings, nil
}
}
为了调用
GetBookings()
的 BookingModel
方法,您需要一个 BookingModel
结构体的实例。然后你可以在该实例上调用 BookingModel
的任何方法:
func GetBookings(w http.ResponseWriter, r *http.Request) {
var bookingModel = models.BookingModel{}
bookings, err := bookingModel.GetBookings()
// always do error checking
if err != nil {
...
}
res, err := json.Marshal(bookings)
// always do error checking
if err != nil {
...
}
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(res)
}