猿问

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, query, class.Id)

    }

}


慕标5832272
浏览 318回答 3
3回答

FFIVE

您假设指向切片的指针将在迭代中自动取消引用。事实并非如此,也没有理由这样做,因为切片已经是一种指针,因此将指向切片的指针完全无用。从有效围棋:如果一个函数接受一个切片参数,它对切片元素所做的更改将对调用者可见,类似于传递一个指向底层数组的指针。在内部,切片由指向底层数组中切片的第一个元素的指针切片的长度切片的容量(切片通常可以扩展到数组末尾)这个结构非常小,使指针无用。
随时随地看视频慕课网APP

相关分类

Go
我要回答