У меня есть требование сохранить либо [], либо список с разными целочисленными значениями, например [1, 7, 8]. Эти значения могут быть любыми между 1-31.
Моя структура для этого поля (DateOfMonth):
type Subscription struct {
gorm.Model
Enabled bool `gorm:"DEFAULT:True"`
Deleted bool `gorm:"DEFAULT:False"`
UserID uint `gorm:"not null"`
Cap int `gorm:"DEFAULT:-1"`
DateOfMonth []int64 `gorm:"type:json default '[]'::json"`
}
Теперь мне нужно прочитать это значение в API и сравнить его с текущая_дата.
Для этого я пробовал:
type Result struct {
ID uint
Email string
UniqueIdentifier string
Cap int
DateOfMonth []uint8
}
var subscriptions []Result
if err := db.Table("users").Select("users.id, users.email, users.unique_identifier, subscriptions.cap, subscriptions.date_of_month").Joins("join subscriptions on users.id = subscriptions.user_id").Where("subscriptions.subscription_type_id=? and users.is_verified=? and subscriptions.enabled=?", subscription_type_id, true, true).Find(&subscriptions).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": true, "reason": "Subscribers not found!", "code": http.StatusBadRequest, "status": "failure"})
return
}
Если я изменю DateOfMonth []uint8
на DateOfMonth []int64
, это даст ошибку. Значение, которое я получаю в этом поле, представляет собой список байтовых значений. Например, [] -> [91 93] и [6] -> [91 54 93]
Если да, bytes.NewBuffer(s.DateOfMonth)
, Я получаю правильное значение, но затем мне нужно перебрать этот фрагмент, чтобы сравнить его с сегодняшней датой. Я пробовал много способов получить фактическое значение (6) в l oop (значение dom), но безрезультатно.
// if len(s.DateOfMonth) > 0 {
// // date_of_month_new := binary.BigEndian.Uint64(date_of_month)
// todays_date_of_month := time.Now().Day()
// fmt.Println(todays_date_of_month) //, date_of_month, reflect.TypeOf(date_of_month))
// for _, dom := range s.DateOfMonth {
// fmt.Println("help", reflect.TypeOf(dom), dom, todays_date_of_month)
// // if dom == todays_date_of_month {
// // fmt.Println("matching", dom, todays_date_of_month)
// // }
// }
// }
Я даже пробовал предложения из различных ответов, например это , это , это
Что мне здесь не хватает? Мы будем очень благодарны за вашу помощь.
Некоторые из полученных мной ошибок:
invalid sql type DateOfMonth (slice) for postgres
Golang cannot range over pointer to slice
cannot range over bytes.NewBuffer(s.DateOfMonth) (type *bytes.Buffer)
sql: Scan error on column index 4, name "date_of_month": unsupported Scan, storing driver.Value type []uint8 into type *[]int