如何解决Golang不能超出指向切片的指针
您假设指向切片的指针将在迭代时自动取消引用。
事实并非如此,没有理由,因为切片已经是一种指针,从而使指向切片的指针完全无用。
从有效出发:
在内部,切片是由
- 指向基础数组中切片的第一个元素的指针
- 切片的长度
- 切片的容量(通常可以将切片扩展到数组的末尾)
这种结构非常小,使指针无用。
解决方法
当尝试在切片指针上移动时,我一直收到此错误。
app/domain/repositories/class_repository.go:24: cannot range over classes (type *[]entities.Class)
我究竟做错了什么?
这是结构:
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,class.Id)
}
}
这是Class结构:
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。