Golang ne peut pas se déplacer sur un pointeur vers une tranche
Je reçois cette erreur lors de la tentative de gamme sur une tranche de pointeur.
app/domain/repositories/class_repository.go:24: cannot range over classes (type *[]entities.Class)
Ce que je fais mal?
Voici la structure:
package repositories
import (
"mobifit/app/domain/entities"
)
type ClassRepository struct {
*Repository
}
func (c *ClassRepository) ClassesForLastNDays(days int) *[]entities.Class {
classes := new([]entities.Class)
query := Select("*").
From("Class").
Where("VisibleAt > CURRENT_TIMESTAMP() - INTERVAL ? DAY").
OrderBy("ClassTypeId").
Sql()
c.Repository.Select(classes, query, days)
c.populateClassRelationships(classes)
return classes
}
func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
for i := range classes { <<<<<<<<<<< Here is the problem
class := classes[i]
//ClassType
c.Repository.GetById(class.ClassType, class.ClassTypeId)
//Instructor
c.Repository.GetById(class.Instructor, class.ClassType.InstructorId)
//Equipment
query := Select("E.*").
From("Equipment E").
Join("ClassEquipment CE on E.Id = CE.EquipmentId").
Where("CE.ClassId = ?").
Sql()
c.Repository.Select(class.Equipment, query, class.Id)
}
}
Ici est la Classe struct:
package entities
import (
"time"
)
type Class struct {
Id int
ClassTypeId int
VideoPath string
VideoSize int
Duration float64
CreatedAt time.Time
VisibleAt time.Time
NoLongerVisibleAt time.Time
//Relationships
ClassType ClassType
Instructor User
Equipment []Equipment
}
source d'informationauteur Lee
Vous devez vous connecter pour publier un commentaire.
Vous êtes en supposant que le pointeur à une tranche sera automatiquement déréférencé pour l'itération.
Ce n'est pas le cas et il n'y a aucune raison pour que, parce qu'une tranche est déjà une sorte de pointeur, de l'affichage d'un pointeur à une tranche totalement inutile.
De Efficace Aller :
En interne, une tranche est faite de
Cette structure est très faible, de l'affichage d'un pointeur inutile.
De Efficace Aller:
Vous tentez d'effectuer une itération sur un pointeur à une tranche qui est une valeur unique, n'est pas une collection n'est donc pas possible.
Changer l'argument de
populateClassRelationships
une tranche, et non un pointeur sur une tranche. Ou vous pourriez déréférencer le pointeur:si vous avez besoin de tirer un élément individuel de la *tranche, vous devez déréférencement d'abord comme ceci:
(*slice)[0]
. Je pilonne ma tête contre*slice[0]
pendant environ 6 heures avant de me rendre compte de cela. Il a à voir avec l'ordre des opérations, et n'est pas, de l'OMI, une très élégante résultat.J'ai fini par écrire quelques pointeur récepteur méthodes en place des modifications comme l'ajout et la pop en plus, à mon avis, de façon raisonnable - un exemple peut être trouvé ici: https://play.golang.org/p/qZEYMcPHl4
Vous pourriez déréférencer le pointeur:
J'ai aussi changé la portée de la clause que je ne pense pas que vous êtes la modification de
classes
.