首页 > 解决方案 > 在 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)

上面的代码有问题吗?

标签: go

解决方案


target = model.Target.AddItem(targetCheck)是错误的,你应该调用target你从range语句中获得的值的方法,所以这样&target.AddItem(targetCheck)


推荐阅读