Golang将struct分配给另一个不起作用的struct字段

时间:2014-01-21 09:44:02

标签: go

我正在尝试使用Gorp参加所有体育课。 Gym类有一个类类型,所以我运行第二个查询来检索它们。我得到了所有课程类型,但最终的分配因某种原因无效。

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

1 个答案:

答案 0 :(得分:2)

分配正常,但您将其分配给正确的对象: 在你的循环中

  

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

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

尝试类似

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

或者更好:让classTypeForClass返回类并将其指定为

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

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