Golang 将结构分配给另一个结构字段不起作用

标签 go

我正在尝试使用 Gorp 获取所有体育类(class)。体育课有一个类(class)类型,所以我运行第二个查询来检索它们。我得到了所有的类类型,但由于某种原因最终的分配不起作用。

package entities

import (
    "fmt"
    "github.com/coopernurse/gorp"
    "time"
)

type Class struct {
    Id                int
    ClassTypeId       int
    ClassType         ClassType
    VideoPath         string
    VideoSize         int
    Duration          float64
    CreatedAt         time.Time
    VisibleAt         time.Time
    NoLongerVisibleAt time.Time
}

func LatestClasses(dbmap *gorp.DbMap) *[]Class {
    var classes []Class
    query := "SELECT * FROM Class"

    _, err := dbmap.Select(&classes, query)
    if err != nil {
        panic(err)
    }

    for _, class := range classes {
        classTypeForClass(dbmap, &class)
    }

    return &classes
}

func classTypeForClass(dbmap *gorp.DbMap, class *Class) {
    var classType ClassType
    query := "SELECT * FROM ClassType "
    query += "WHERE Id=?"

    err := dbmap.SelectOne(&classType, query, class.ClassTypeId)
    if err != nil {
        panic(err)
    }
    fmt.Println(classType) <<<<<<<<<<< Lists Yoga, Pilates etc.
    class.ClassType = classType <<<<<<<< Seemingly does nothing

更新

ClassType 结构如下所示:

package entities

import (
    "time"
)

type ClassType struct {
    Id           int
    Code         string
    Name         string
    InstructorId int
    CreatedAt    time.Time
}

另一个更新

我显示的数据如下:

<h1>
    Latest Classes
</h1>
<hr/>


{{ range .}}
    {{.VideoPath}}
    <br>
    {{.ClassType.Name}}
    <br>
    {{.VideoSize}}
    <br>
    {{.Duration}}
    <br>
    {{.CreatedAt}}
    {{.NoLongerVisibleAt}}
<br><br>
{{end}}

最佳答案

赋值工作正常,但您没有将它赋给正确的对象: 在你的循环中

for _, class := range classes { classTypeForClass(dbmap, &class) }

classclasses slice 中元素的副本。您的 classTypeForClass(dbmap, &class) 正确地将类分配给此副本,并在循环体末尾丢弃该副本。

尝试类似的东西

for i := range classes {
    classTypeForClass(dbmap, &(classes[i]))
}

或者可能更好:让 classTypeForClass 返回类并像这样分配它

for i := range classes {
    classes[i].ClassType = classTypeForClass(dbmap, &(classes[i]))
}

(甚至可以将类作为值而不是指针传递。)

关于Golang 将结构分配给另一个结构字段不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254381/

相关文章:

go - channel 接收运算符与不是 channel 的东西一起使用?

recursion - 我如何阻止(和加入)由未知数量的 goroutines 提供的 channel ?

go - 'Slice bounds out of range' - 分割 slice 时出错

go - 调用后获取操作系统错误的惯用方法

Go:我是否创造了太多的值(value)?

unit-testing - 使用 Gomock 测试返回错误 : Expected call has already been called the max number of times

go - 当 NextDecoder 依赖于上一层而不是当前层时,如何正确编写自定义层?

printing - 如何使用 fmt 在 Go 中打印出常量 uint64?

go - 试图了解如何在我的项目和包中查找结构

docker - 如何为ARM设备构建Docker镜像?