FAQ

On 18 March 2013 17:36, Gbr wrote:
The language specification seems silent on what is returned from a defer'd
function. The current implementation appears to just return nil, making it
difficult to determine the true outcome of the defer'd function.

Is this correct?

Will defer'd functions always return nil? That is, is there any thought to
allowing defer to return real values in later versions of Go?

Meanwhile, is there any alternative to handling this case other than
isolating panics from opens in separate functions?

func handleWork() {
...
data, err := doWork()
if err != nil { handleProblem(data); }
if data == nil { return; }
processData(data)
...
}

func doWork() ([]byte, error) {

defer func() ([]byte, error) {
if err := recover(); err != nil {
return myDefault, myError // should not return nil, nil
}
return closeResources() // can validly return nil, nil
}
you can assign to named return values in a return.

func doWork() (data []byte, err error) {
defer func() {
if rerr := recover(); rerr != nil {
data, err = myDefault, rerr
}
}()
something()
}

--
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 golang-nuts+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 5 | next ›
Discussion Overview
groupgolang-nuts @
categoriesgo
postedMar 18, '13 at 5:36p
activeMar 19, '13 at 6:36a
posts5
users4
websitegolang.org

People

Translate

site design / logo © 2022 Grokbase