希望这是我关于指针的最后一个问题:
我正在调用一个存储库方法来获取一些体育课程。我在这样的视图中显示它们:
{{ 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
}
答案 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)
}