我正在嘗試編寫一個方法,該方法將返回一個可以滿足json.Marshaler接口的函數。我的推理是提供結構的不同表示。也許我正在接近這個完全錯誤的。func (api *Api) SiteList(c *gin.Context) { var sites []db.Site if err := api.db.Find(&sites).Error; err != nil { } var payload []json.Marshaler for _, site := range sites { payload = append(payload, site.ToApi()) } c.JSON(http.StatusOK, payload)}我從這個函數得到的結果是列表中的項目數量正確,但每個項目的值相同:[ { "key": "NZ7LCA9HQN3", "name": "autumn-waterfall-1573" }, { "key": "NZ7LCA9HQN3", "name": "autumn-waterfall-1573" }, { "key": "NZ7LCA9HQN3", "name": "autumn-waterfall-1573" }, { "key": "NZ7LCA9HQN3", "name": "autumn-waterfall-1573" }, { "key": "NZ7LCA9HQN3", "name": "autumn-waterfall-1573" }]最后,這是ToApi實現:type EncoderFunc func() ([]byte, error)func (fn EncoderFunc) MarshalJSON() ([]byte, error) { return fn()}func (site *Site) ToApi() json.Marshaler { return EncoderFunc(func() ([]byte, error) { var payload public.Site payload.Name = site.Name payload.Key = site.Key data, err := json.Marshal(payload) if err != nil { return nil, err } return data, nil })}
- 1 回答
- 0 關注
- 202 瀏覽
添加回答
舉報
0/150
提交
取消