为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 不能跨越指向切片的指针

Golang 不能跨越指向切片的指针

Go
慕标5832272 2021-07-09 18:01:16
尝试在切片指针上进行范围时,我不断收到此错误。app/domain/repositories/class_repository.go:24: cannot range over classes (type *[]entities.Class)我究竟做错了什么?这是结构: package repositoriesimport (    "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)    }}
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您假设指向切片的指针将在迭代中自动取消引用。

事实并非如此,也没有理由这样做,因为切片已经是一种指针,因此将指向切片的指针完全无用。

从有效围棋:

如果一个函数接受一个切片参数,它对切片元素所做的更改将对调用者可见,类似于传递一个指向底层数组的指针。

在内部,切片由

  • 指向底层数组中切片的第一个元素的指针

  • 切片的长度

  • 切片的容量(切片通常可以扩展到数组末尾)

这个结构非常小,使指针无用。


查看完整回答
反对 回复 2021-07-19
  • 3 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号