Dưới đây là hướng dẫn của tôi về việc giảm xử lý lỗi đối với Go, ví dụ là khi nhận các tham số URL HTTP:
(Mẫu thiết kế bắt nguồn từ https://blog.golang.org/errors-are-values )
type HTTPAdapter struct {
Error *common.AppError
}
func (adapter *HTTPAdapter) ReadUUID(r *http.Request, param string, possibleError int) uuid.UUID {
requestUUID := uuid.Parse(mux.Vars(r)[param])
if requestUUID == nil {
adapter.Error = common.NewAppError(fmt.Errorf("parameter %v is not valid", param),
possibleError, http.StatusBadRequest)
}
return requestUUID
}
gọi nó cho nhiều tham số có thể sẽ như sau:
adapter := &httphelper.HTTPAdapter{}
viewingID := adapter.ReadUUID(r, "viewingID", common.ErrorWhenReadingViewingID)
messageID := adapter.ReadUUID(r, "messageID", common.ErrorWhenReadingMessadeID)
if adapter.Error != nil {
return nil, adapter.Error
}
Đây không phải là một viên đạn bạc, nhược điểm là nếu bạn mắc nhiều lỗi, bạn chỉ có thể nhận được lỗi cuối cùng.
Nhưng trong trường hợp này, nó tương đối lặp lại và rủi ro thấp, do đó tôi chỉ có thể nhận được lỗi cuối cùng có thể xảy ra.