亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 HandlerFunc 返回錯誤 - 需要一個新類型

從 HandlerFunc 返回錯誤 - 需要一個新類型

Go
子衿沉夜 2023-05-04 16:44:24
現在我有這個:type AppError struct{   Status int   Message string}func (h NearbyHandler) makeUpdate(v NearbyInjection) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request) {        item, ok := v.Nearby[params["id"]]        if !ok {            return AppError{                500, "Missing item in map.",            }        }   }}問題是如果我這樣做:func (h NearbyHandler) makeUpdate(v NearbyInjection) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request) AppError { // <<< return AppError    }}不會編譯 b/c http.HandlerFunc 不會返回返回 AppError 的函數。nil我的另一個問題是,如果我使用 AppError 作為返回值,如何避免顯式返回?請注意,我收到此錯誤:不能在返回參數中使用 func 文字(類型 func(http.ResponseWriter, *http.Request) AppError)作為類型 http.HandlerFunc
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

它是一個服務器,處理程序不應返回錯誤,因為據說您應該簡單地通知客戶端在處理請求時遇到了錯誤。判斷錯誤類型并輸出相應的http代碼和可選的消息體。

現在,如果碰巧你的服務器有一些其他的 goroutines 需要被通知你可以通過一個通道向他們發送錯誤信號(用于指標或類似的東西),所以你可以以任何你希望的方式使用錯誤在處理程序范圍之外。


查看完整回答
反對 回復 2023-05-04
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

不會編譯 b/c http.HandlerFunc 不會返回返回 AppError 的函數。


為什么不直接在 makeUpdate 方法中處理錯誤?


如果我使用 AppError 作為返回值,如何避免顯式返回 nil?


不能在返回參數中使用 'nil' 作為 AppError 類型,您可以使用初始值,如下所示:


func test() AppError {

    ret := AppError{

        200, "OK",

    }


    condition := true // some condition

    if !condition {

        ret.Status = 500

        ret.Message = "internal error"

    }

    return ret

}


查看完整回答
反對 回復 2023-05-04
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

因此,go 的設計者沒有返回請求的狀態,而是給了您ResponseWriter。這是您與客戶的主要互動。例如設置一個狀態碼,做WriteHeader(500)。



查看完整回答
反對 回復 2023-05-04
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號