这看起来有点愚蠢,肯定有更好的方法吗?
err = SendMessageAndWait(db,"this is a test") if err != nil { fmt.Println("Error sending message",err) return } err = DoSomething(db,err) return } err = CheckSomething(db,"this is another test") if err != nil { fmt.Println("Error sending message",err) return } err = SendMessageAndWait(db,"this is a third test") if err != nil { fmt.Println("Error sending message",err) return } ... x10 ...
可悲的是,这就是Go的方式,但是在某种程度上你可以让它更清洁:
func isError(err error,pre string) error { if err != nil { log.Printf("%v: %v",pre,err) } return err } func isErrorBool(err error,pre string) (b bool) { if err != nil { log.Printf("%v: %v",err) b = true } return } func checkSomething() error { return nil } func main() { if err := isError(checkSomething(),"something Failed"); err != nil { return /* err */ } //if you don't want to return the error,just check it and die. if isErrorBool(checkSomething(),"something else Failed") { return } }