Hi I'm new and I'm learning GOlang using GO 1.20.7 and GOLand trying to write a simple crud application with Gorilla Mux and Gorm. Writing my controller (in controllers package) I'm not able to access the GetAllBooks func wrote into the models package. I thought it could be a problem of uppercase/lowercase but I think it is correct.
Here's my controller:
package controllers
import (
"github.com/myname/go-bookstore/pkg/models"
"net/http"
)
var NewBook model.Book
func GetBook(w http.ResponseWriter, r *http.Request) {
newBooks := models.GetAllBooks()
}
And here my models package from where the func is called:
package models
import (
"github.com/myname/go-bookstore/pkg/config"
"github.com/jinzhu/gorm"
)
var db *gorm.DB
type Book struct {
gorm.Model
Name string `gorm:"" json:"name"`
Author string `json:"author"`
Publication string `json:"publication"`
}
func init() {
config.Connect()
db = config.GetDB()
db.AutoMigrate(&Book{})
}
func (b *Book) CreateBook() *Book {
db.NewRecord(b)
db.Create(&b)
return (b)
}
func (b *Book) GetAllBooks() []Book {
var Books []Book
db.Find(&Books)
return Books
}
My IDE on the GetAllBook method call in controllers says "Unresolved reference 'GetAllBooks'".
As @mkorpriva said in the comments, GetAllBooks is a method, not a function! Just Change GetAllBooks method to a function like this:
func GetAllBooks() []Book {
var Books []Book
db.Find(&Books)
return Books
}
as documentation says,
Go does not have classes. However, you can define methods on types.
you may see an online tutorial to completely understand methods and their use cases. good luck.