Golang无法在视图中显示检索到的数据

时间:2014-01-22 21:48:07

标签: go

希望这是我关于指针的最后一个问题:

我正在调用一个存储库方法来获取一些体育课程。我在这样的视图中显示它们:

    {{ range .}}
            {{.VideoPath}} << Correct
            <br>
            {{.Instructor.Email}} << Blank
            <br>
            {{.ClassType.ClassTypeCode}} << Blank               
    {{end}}   

教师和classtype字段以空结构形式出现,但在ClassRepository中我做了一些Printlns并打印了正确的数据。某处存在指针问题或其他问题。我做错了什么?

这是存储库:

package repositories    

type ClassRepository struct {
    Gorp gorp.SqlExecutor
}

func (c ClassRepository) ClassesForLastNDays(days int) []entities.Class {
    var classes []entities.Class
    // Gets the classes - omitted for brevity
    c.populateClassRelationships(classes)
    return classes
}

func (c ClassRepository) populateClassRelationships(classes []entities.Class) {
    for i := range classes {
        class := classes[i]

        // ClassType
        obj, err := c.Gorp.Get(entities.ClassType{}, class.ClassTypeCode)
        if err != nil {
            panic(err)
        }
        class.ClassType = *obj.(*entities.ClassType)
        fmt.Println(class.ClassType) << Returns correct data

        // Instructor and Equipment
        Same for instructor and Equipment


    }

}

更新:

经过大量的printlns后,我可以确认问题是在populateClassRelationships之后,填充值全部丢失了。

func (c ClassRepository) ClassesForLastNDays(days int) []entities.Class {
        var classes []entities.Class
        // Gets the classes - omitted for brevity
        c.populateClassRelationships(classes) <<<< In the method,Println has values
        return classes <<<< Values have been lost
    }

1 个答案:

答案 0 :(得分:1)

我认为问题在于您的函数populateClassRelationships,它不会修改原始数据结构,如下面的代码最终输出所示:

[1]
[]

不工作

func myFunc(data []int) {
    data = append(data, 1)
    fmt.Println(data)
}

func main() {
    d := []int { }
    myFunc(d)
    fmt.Println(d)
}

通过引入参数作为指针,可以修改原始数据

func myFuncNew(data *[]int) {
        *data = append(*data, 1)
    fmt.Println(*data)
}