Structs 方法在导入其他包时给出未定义

问题描述 投票:0回答:1

我有一个模型文件,其中有一个结构方法。我想在我的控制器中使用该方法。但它说“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
    }
}
go struct methods package
1个回答
0
投票

为了调用

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.