### `err返回值`没有获取到,求解答!
```
package main
import "fmt"
func main() {
fmt.Println(Parse())
}
func Parse() error {
var err error
defer func() {
//选择性的recover
switch p := recover(); p {
case nil:
case "what":
err = fmt.Errorf("internal error")
fmt.Println(err)
default:
panic(p)
}
}()
panic("what")
return err
}
```
### **输出值**:
```
internal error
<nil>
```
更多评论
return、defer执行顺序应该是:
1. return要返回值的赋值操作(nil)
2. defer语句 (这个时间对err赋值已经晚了,因为return将要返回的值已经进行过赋值,nil)
3. return
这样的步骤吧,如果想赋值可以这样
```
package main
import "fmt"
func main() {
fmt.Println(Parse())
}
func Parse()(err error){
defer func() {
//选择性的recover
switch p := recover(); p {
case nil:
case "what":
err = fmt.Errorf("internal error")
fmt.Println(err)
default:
panic(p)
}
}()
panic("what")
return err
}
```
具体的可以看这篇博文:https://my.oschina.net/henrylee2cn/blog/505535
#3