调用函数是否会破坏recover()?

I was using a library which recover()s from panics, and it was using code that simplifies to the following:

func main() {
    defer rec()
    panic("X")
}

func rec() {
    rec2()
}

func rec2() {
    fmt.Printf("recovered: %v
", recover())
}

The output of this is:

recovered: <nil>
panic: X
... more panic output ...

Notably, recover() returns nil instead of the error. Is this intended behavior?

recover must be called directly by a deferred function.

from the language spec:

The return value of recover is nil if any of the following conditions holds:

  • panic's argument was nil;
  • the goroutine is not panicking;
  • recover was not called directly by a deferred function.