ด้านล่างนี้คือการลดการจัดการข้อผิดพลาดสำหรับ Go ตัวอย่างสำหรับเมื่อรับพารามิเตอร์ HTTP URL:
(รูปแบบการออกแบบมาจาก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
}
เรียกมันสำหรับพารามิเตอร์ที่เป็นไปได้หลายตัวจะเป็นดังนี้:
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
}
นี่ไม่ใช่กระสุนเงินข้อเสียคือหากคุณมีข้อผิดพลาดหลายครั้งคุณจะได้รับข้อผิดพลาดสุดท้ายเท่านั้น
แต่ในกรณีนี้มันค่อนข้างซ้ำซากและมีความเสี่ยงต่ำดังนั้นฉันจึงสามารถรับข้อผิดพลาดสุดท้ายที่เป็นไปได้