Hi guys,
at first I though I really like the idea of how Go deals with error
management and handling, but the more Go code I look at or try to program,
the more I get scared about checking errors every second line in every
given block of code.
Take a look at this example here from "Build Web Application with Golang":
// insert
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created)
values(?,?,?)")
if err != nil {
// handle error
}
res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")
if err != nil {
// handle error
}
id, err := res.LastInsertId()
if err != nil {
// handle error
}
fmt.Println(id)
// update
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
if err != nil {
// handle error
}
res, err = stmt.Exec("astaxieupdate", id)
if err != nil {
// handle error
}
affect, err := res.RowsAffected()
if err != nil {
// handle error
}
Seriously? And yes, I have read https://blog.golang.org/errors-are-values...
The best case reduction I found is:
...
res, err = stmt.Exec("astaxieupdate", id)
checkError(err)
...
Still, I need this after each line of calling a function which may return
an error.
I bet this is not pleasant to do in larger code bases and it also takes
away focus from what is actually happening.
50-80% of all lines of code in my example deal with error handling?
This is not good. Seriously.
And don't get me wrong, there is a lot of things I really like, love and
adore about Go, but catching errors needs an improved syntax!
And I am not proposing try...catch here.
How about introducing a new piece of syntax
"watch if .... "
which tells the compiler to watch out for changes in a given SimpleStmt
The same code as above would look like this:
var err Error
watch if err != nil {
// handle error(s)
}
// insert
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname,
created) values(?,?,?)")
res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")
id, err := res.LastInsertId()
fmt.Println(id)
// update
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
res, err = stmt.Exec("astaxieupdate", id)
affect, err := res.RowsAffected()
- The "watch if" would be executed after each assignment of any of the
variables used in SimpleStmt of the statement.
- Multiple "watch if" would be executed in order or appearance
- The "watch if" could be used like "defer..." inside functions
- The "watch if" would work in its full scope of the watched variables
I am not a language expert, so may be there is a saner way of expression
what I want to achieve.
But bottom line is, there should by an easier to read and write way to deal
with errors in Go.
Martin
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.