登录
首页 >  Golang >  Go问答

无法从另一个GO包中访问函数

来源:stackoverflow

时间:2024-02-08 08:48:23 481浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《无法从另一个GO包中访问函数》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

嗨,我是新人,我正在使用 go 1.20.7 和 gol 学习 golang,并尝试使用 gorilla mux 和 gorm 编写一个简单的 crud 应用程序。 编写我的控制器(在控制器包中)我无法访问写入模型包中的 getallbooks 函数。 我认为这可能是大小写的问题,但我认为这是正确的。

这是我的控制器:

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

这里是我的模型包,其中调用了 func:

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
}

我的 ide 在控制器中调用 getallbook 方法时显示“未解析的引用‘getallbooks’”。


正确答案


正如@mkorpriva在评论中所说,getallbooks是一个方法,而不是一个函数!只需将 getallbooks 方法更改为如下函数:

func GetAllBooks() []Book {
    var Books []Book
    db.Find(&Books)
    return Books
}

正如文档所述,

go 没有类。但是,您可以在类型上定义方法。

您可能会看到在线教程来完全理解方法及其用例。祝你好运。

以上就是《无法从另一个GO包中访问函数》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>