当试图在切片指针上进行范围调整时,我不断收到此错误.

app/domain/repositories/class_repository.go:24: cannot range over classes (type *[]entities.Class)

我做错了什么?

以下是 struct :

 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)
    }
}

下面是Class 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
    }

推荐答案

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

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

Effective Go:

如果函数接受一个切片参数,它会对元素进行更改

在内部,切片由

  • 指向基础数组中切片的第一个元素的指针
  • 切片的长度
  • 片的容量(片通常可以扩展到数组的末尾)

此 struct 非常小,使指针变得毫无用处.

Go相关问答推荐

JWT库返回及时无效的令牌有效

CGO如何转换为文件*类型

将类型定义为泛型类型实例化

如何使用gopher-lua定义一个Lua函数,该函数有一个预定义的表作为param,Lua脚本可以在其中访问该函数中的表?

无法在go中为docker容器写入有效的挂载路径

更改多对多连接表的名称

具有嵌套重复的正则表达式

Gorm delete with clauses sqlmock 测试

没有任务角色的 AWS CDK ECS 任务定义

拆分文本并按空格获取字符串数组,如果文本长度超过 500,则获取字符串数组

grpc-gateway:重定向与定义不匹配(原始文件)

Golang 构建多平台问题

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

Golang invopop jsonschema 使用 if/then/else

如何使用特定的 Go 版本运行 govulncheck?

Golang BigInt 部门

使用 image/jpeg 编码导致图像饱和/错误像素

在 Go 中将指针传递给函数的正确方法是什么,以便我可以读取和/或修改指针表示的值?

如何在golang中使用ozzo验证进行时间最大验证

如何在测试中传递用户名和密码等参数