区分JSON和其他错误

时间:2018-01-02 20:35:10

标签: json go error-handling

enc := json.NewEncoder(w)
err := enc.Encode(struct {
    Method    string        `json:"method"`
    Results   []interface{} `json:"results"`
    CacheTime int           `json:"cache_time"`
}{Method: answerInlineQueryMethod, Results: results, CacheTime: 0})
if err != nil {
    log.Printf("failed to answer to inline query: %s", err)
}

如何区分应该导致恐慌的JSON错误和发送响应所导致的错误,哪些应该记录?

1 个答案:

答案 0 :(得分:9)

encoding/json包定义了它将返回的错误类型。对于编码,您有MarshalerError,  UnsupportedTypeError,  和UnsupportedValueError

您可以检查Encode返回的错误类型是否为其中之一。

如果响应不是很大并且不依赖于根据json.Encoder协议发送多个json值,则只需使用json.Marshal并单独编写响应即可。