duanliao3826 2014-01-21 09:44
浏览 21
已采纳

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

I am trying to use Gorp to get all gym classes. Gym classes have a class type so I run a second query to retrieve them. I get all the class types back, but the final assingment is not working for some reason.

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

}

UPDATE

The ClassType struct looks like this:

package entities

import (
    "time"
)

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

ANOTHER UPDATE

I display the data as follows:

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


{{ range .}}
    {{.VideoPath}}
    <br>
    {{.ClassType.Name}}
    <br>
    {{.VideoSize}}
    <br>
    {{.Duration}}
    <br>
    {{.CreatedAt}}
    {{.NoLongerVisibleAt}}
<br><br>
{{end}}
  • 写回答

1条回答 默认 最新

  • dqm4675 2014-01-21 12:03
    关注

    The assignment works properly, but you are not assigning it to the proper object: In your loop

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

    class is a copy of the elements in the classes slice. Your classTypeForClass(dbmap, &class) properly assigns the class to this copy and the copy is discarded at the end of the loop body.

    Try something like

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

    or maybe nicer: Have classTypeForClass return the class and just assign it like

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

    (Maybe even passing class as a value, not as a pointer.)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值