2015-02-11 55 views
0

我有一個結構,有一個方法,爲響應服務。很無聊,處理錯誤

type ctrl struct { 
    *base.AjaxCtrl 
    file ini.File 
} 

func (rcv *ctrl) getVar() string { 
    return mux.Vars(rcv.Req)["location"] 
} 

func (rcv *ctrl) getFile() string { 
    return location.JoinPaths(folder, rcv.getVar()+ext) 
} 

func (rcv *ctrl) upload() { 
    file, err := ini.LoadFile(rcv.getFile()) 
    if err != nil { 
     rcv.AddErr("TextError", err.Error()) 
     return 
    } 
    rcv.file = file 
} 

// Convert text to json structure 
func (rcv *ctrl) convertToJson() string { 
    js, err := json.Marshal(rcv.file.Section("text/signup")) 
    if err != nil { 
     rcv.AddErr("ConvertError", err.Error()) 
     return "" 
    } 
    return string(js) 
} 

func (rcv *ctrl) serveHttp() (types.SuccsJSON, types.ErrorsJSON) { 

    rcv.upload() 
    if rcv.AnyErrors() { 
     return nil, rcv.Errs 
    } 

    str := rcv.convertToJson() 
    if rcv.AnyErrors() { 
     return nil, rcv.Errs 
    } 
    return c.Sucss, nil 
} 

方法serveHttp()處理對客戶端的響應。正如你所看到的,我每次都用AnyError()方法處理錯誤。我發現這種方式很無聊,也許是錯誤的設計。 拋開恐慌而不是錯誤處理會更好嗎?

func (rcv *ctrl) upload() { 
    file, err := ini.LoadFile(rcv.getFile()) 
    if err != nil { 
     rcv.AddErr("TextError", err.Error()) 
     panic() 
    } 
    rcv.file = file 
} 
+1

[Go language中的錯誤處理](http://stackoverflow.com/questions/28409118/error-handling-in-go-language) – icza 2015-02-11 12:37:13

+0

非常感謝。 – 2015-02-11 12:46:28

+0

因爲GoLang放棄了例外,所以我放棄了GoLang。 – Vector 2015-02-12 07:27:50

回答

4

不,這不會更好。在Go中檢查你的錯誤並不壞設計。另一方面,當沒有理由這樣做時會驚慌失措,另一方面,糟糕的設計,因爲它很難測試和調試。

The Go Wiki明確禁止在真正例外的情況下使用panic,此時錯誤不可恢復且程序狀態無法修復。