Hacker News new | ask | show | jobs
by Majora320 3134 days ago
Why do you have to call `req.Body.Close()`? Does Go not have RAII?

Does Go have something analogous to Rust's `try!` or `?` operator, which would turn it into (pseudocode):

    contents, err := try!(ioutil.Readall(req.Body))
Or:

    contents, err := ioutil.Readall(req.Body)?
If not, why not?

(I don't know Go)

1 comments

No garbage collected language will ever have RAII, the features conflict. Go does not have RAII, but tries to fix it with "defer" [1].

As for why not, you'd have to ask the Go team. But my guess would be that as a general rule, Go does not have language feature X. It's a very, very basic language deliberately lacking pretty much every modern language feature you can think of. The pro/con is that programming in Go is very delibarete. Go programs will only ever do what you explicitly make them do, to an almost ridiculous extent. If a Go program knows how to sort a list of customers, it takes 20 lines of code to make it aware of how to sort any other record type. Especially operations minded people this is a big plus.

[1] https://blog.golang.org/defer-panic-and-recover