go - 在 Golang 中将切片附加到结构
问题描述
我正在尝试将一个数组附加到另一个数组(或切片到结构?)来自查询(目标)的结果被迭代并附加来自另一个查询的结果(每个检查点的目标)基于先前的查询 result.id
然后在模板中迭代结果。
模型
type Target struct {
ID uint32 `db:"id"`
CriteriaID string `db:"criteria_id"`
TargetCheck []*TargetCheck
}
type TargetCheck struct {
ID uint32 `db:"id"`
TargetID string `db:"target_id"`
CheckpointID template.HTML `db:"checkpoint_id"`
Name string `db:"name"`
}
func TargetByCriteriaID(criteriaID string) ([]Target, error) {
... <return rows>
}
func CheckpointByTargetID(targetID uint32) ([]TargetCheck, error) {
... <return rows>
}
func (target *Target) AddItem(TargetCheckItem *TargetCheck) []*TargetCheck {
target.TargetCheck = append(target.TargetCheck, TargetCheckItem)
return target.TargetCheck
}
控制器
func CriteriaBrowseGET(w http.ResponseWriter, r *http.Request) {
criteriaID := 5
target, err := model.TargetByCriteriaID(criteriaID)
for i := range target {
targetCheck, err := model.CheckpointByTargetID(target[i].ID)
target = model.Target.AddItem(targetCheck)
}
v := view.New(r)
v.Name = "criteria/browse"
v.Vars["target"] = target
v.Render(w)
}
看法
{{range $index, $content := .target}}
<p>Target: {{.ID}}</p>
{{if .}}
{{range .TargetCheck}}
<p>{{.CheckpointID}}</p>
<p>{{.Name}}</p>
{{end}}
{{end}}
{{end}}
执行go build
时说:
vendor\app\controller\criteria.go:74:24: 无效的方法表达式 model.Target.AddItem (需要指针接收器: (*model.Target).AddItem)
vendor\app\controller\criteria.go:74:24: model.Target.AddItem 未定义(类型 model.Target 没有方法 AddItem)
上面的代码有问题吗?
解决方案
target = model.Target.AddItem(targetCheck)
是错误的,你应该调用target
你从range
语句中获得的值的方法,所以这样&target.AddItem(targetCheck)
做
推荐阅读
- tensorflow - 全连接前后的多个Lstm
- exception - int() 不会在 try 块语句中将浮点数更改为整数
- java - 通过对象在静态方法上使用非静态变量?爪哇
- c++ - c ++中奇怪的for循环语法
- python - 行间隔的滚动差异
- java - dom4j - 我想在处理指令后消除空行
- javascript - 尝试在发票中添加 5% 的固定增值税(税)
- .htaccess - 如何为包含不在末尾但在斜杠之间的文件名的 url 页面进行内部重定向
- javascript - 添加表情符号后的Jquery焦点光标
- python - Google App Engine Flask 413 请求实体太大错误