2015-02-11 53 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,此时错误不可恢复且程序状态无法修复。