error: json: unsupported type: func() time.在Golang的时光



我是golang的新手,只是在Echo框架中尝试了一些API,得到了一些错误。

My Models:

package models
import (
"net/http"
"quotes/db"
)
type Quote struct {
Id          int    `json:"id"`
Title       string `json:"title"`
Description string `json:"description"`
}
func GetAll() (Response, error) {
var quotes Quote
var res Response
ctx := db.Init()
ctx.Find(&quotes)
res.Status = http.StatusOK
res.Message = "Success"
res.Data = ctx
return res, nil
}

My Schema table

package schema
type Quotes struct {
Id          int    `json:"id"`
Title       string `json:"title"`
Description string `json:"description"`
}

My Response type for Api

package models
type Response struct {
Status  int         `json:"status"`
Message string      `json:"message"`
Data    interface{} `json:"data"`
}

我试图在模型和模式中添加这个:

CreatedAt   time.Time `gorm:"type:timestamp" json:"created_at,string,omitempty"`
UpdatedAt   time.Time `gorm:"type:timestamp" json:"updated_at,string,omitempty"`
DeletedAt   time.Time `gorm:"type:timestamp" json:"deleted_at,string,omitempty"`

仍然不工作,任何解决方案?

我希望api工作没有错误

使用gorm时,需要嵌入一个gorm。模型结构,包括字段ID, CreatedAt, UpdatedAt, DeletedAt。

参考

// gorm.Model definition
type Model struct {
ID        uint           `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}

不熟悉echo,但请阅读下面的内容来了解如何使用gorm。

在你的情况下,你可以试着这样做:

package schema
type Quote struct {
gorm.Model
Title       string `json:"title"`
Description string `json:"description"`
}

然后获取所有引号:

func GetAll() (Response, error) {
var quotes []schema.Quote // slice
ctx := db.Init()
// Assuming
// ctx, err := gorm.Open(....)
// https://gorm.io/docs/query.html
result := db.Find(&quotes)
if result.Error != nil {
return Response{
Status: http.StatusInternalServerError,
Message: "Query failed",
},result.Error
}
if result.RowsAffected == 0 {
return Response{
Status: http.StatusNotFound,
Message: "No records found",
},nil
}

return Response{
Status: http.StatusOK,
Message: "Success",
Data: quotes,
},nil
}

请记住Data字段具有类型接口{},这意味着它可以保存任何类型的值。如果值不是切片,则使用&操作符,取Quote值的地址。slice已经是一个指向底层slice的指针,所以需要使用&运营商。

如果您想访问来自Data字段的Quote值切片,您将需要使用类型断言将值从接口{}类型转换为[]Quote类型。下面是一个示例:

// Assume that response.Data holds a slice of Quote values
quotes, ok := response.Data.([]Quote)
if !ok {
// Handle the case where response.Data is not a slice of Quote
}

警告:由于返回的是切片,因此对返回的切片的任何更改也将修改初始切片。如果您想避免这种情况,那么将切片值复制到新切片:

quotesCopy = make([]schema.Quote, len(quotes))
copy(quotesCopy, quotes)

相关内容

  • 没有找到相关文章

最新更新