为了账号安全,请及时绑定邮箱和手机立即绑定

如果数据库为空,则返回一个空数组

如果数据库为空,则返回一个空数组

Go
炎炎设计 2021-10-11 10:33:03
我的应用程序的前端期望 json 从命名空间下的服务器返回(如下messages所示){   messages: [{       "id": "6b2360d0" //other properties omitted   },{       "id": "a01dfaa0" //other properties omitted   }]}如果没有消息,我需要返回一个带有命名空间的空数组{    messages: []}但是,null如果没有从数据库中提取消息,下面的代码当前会返回{        messages: null    }如何更改下面的代码,以便  {        messages: []    }如果数据库中没有消息,则返回?type Inbox struct {    Messages []*Message `json:"messages"`}type Message struct {    Content string `json:"type"`    Date string `json:"date"`    Id   string `json:"id"`}func fetchMessages(w http.ResponseWriter, req *http.Request) {    var ib Inbox    var index int = 0    err := db.View(func(tx *bolt.Tx) error {        c := tx.Bucket([]byte("messages")).Cursor()        for k, v := c.Last(); k != nil && index < 10; k, v = c.Prev() {         //note the next few lines might appear odd, currently each  json object to be added to the array of messages is also namespaced under 'message', so I first unmarshal it to a map and then unmarshal again into a the struct            var objmap map[string]*json.RawMessage            if err := json.Unmarshal(v, &objmap); err != nil {                return err            }            message := &Message{}            if err := json.Unmarshal(*objmap["message"], &message); err != nil {                return err            }            ib.Messages = append(ib.Messages, message)        }        return nil    })    response, _ := json.Marshal(a)    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(http.StatusOK)    w.Write(response)}
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

代替:

    var ib Inbox

和:

    var ib Inbox
    ib.Messages = make([]*Message, 0)

或与:

    ib := Inbox{Messages: make([]*Message, 0)}

(可选地使用make(…, 0, someInitialCapacity)代替。)


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信