user6216224
user6216224

Reputation:

Distinguish between JSON and other errors

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)
}

How can I distinguish between JSON errors, which should cause a panic and errors caused by sending the response, which should be logged?

Upvotes: 0

Views: 111

Answers (1)

JimB
JimB

Reputation: 109335

The encoding/json package defines the error types it will return. For encoding you have MarshalerError, UnsupportedTypeError, and UnsupportedValueError.

You can inspect if the error type returned by Encode is one of these 3.

If the responses are not huge and don't rely on sending multiple json values per the json.Encoder protocol, you can simply use json.Marshal and write the response separately.

Upvotes: 9

Related Questions