我是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("es)
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("es)
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)