gpt4 book ai didi

go - impl函数的参数不足

转载 作者:行者123 更新时间:2023-12-01 22:31:31 24 4
gpt4 key购买 nike

// user.go
package models

type User struct {
Id int `db:"id" json:"id"`
CreatedAt time.Time `db:"created_at" json:"created_at"`
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}

func (User) GetById(c echo.Context, id int) (*User, error) {
db := c.Get("DB").(*sqlx.DB)
user := User{}
err := db.Get(&user, fmt.Sprintf("SELECT id, created_at, updated_at FROM users WHERE id=%d", id))
if err != nil {
fmt.Println(err)
}
return &user, err
}

// main.go
package main

// Success
func fetch_success(c echo.Context) error {
user := models.User{}
user2, err := models.User.GetById(user, c, 5)
}


// Fail: : not enough arguments in call to method expression models.User.GetById
// have (echo.Context, number)
// want (models.User, echo.Context, int)
func fetch_failure(c echo.Context) error {
user, err := models.User.GetById(c, 5)
}

在上面的代码中,GetById的参数定义为 c echo.Context, id int。仅需要两个参数。但是编译器警告我,例如“在对方法表达式模型的调用中没有足够的参数。User.GetById”

有什么问题?

最佳答案

您正在调用方法GetById,但未在对象上调用。当Go调用方法时,它将隐式提供该对象作为第一个参数。它类似于在Python中传递self引用,但从语法上讲,它介于func关键字和函数名称之间。

将其重写为函数:

func GetUserById(c echo.Context, id int) (*User, error) {
db := c.Get("DB").(*sqlx.DB)
user := User{}
err := db.Get(&user, fmt.Sprintf("SELECT id, created_at, updated_at FROM users WHERE id=%d", id))
if err != nil {
fmt.Println(err)
}
return &user, err
}

然后打电话

user, err := models.GetUserById(c, 5)

关于go - impl函数的参数不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com