Выполнение функции f() завершается после первого panic, потом отрабатывает defer.
Второй panic выполнен не будет, т.к. выполнение функции уже завершилось и до него очередь не дойдёт.
Можно добавить немного log.Println в ваш пример и проследить ход выполнения, например вот так
package main
import "log"
func f() {
defer func() {
if r := recover(); r != nil {
log.Printf("recover:%#v", r)
}
}()
log.Println("Start first panic")
panic(1)
log.Println("After first panic")
panic(2)
log.Println("After second panic")
}
func main() {
f()
log.Println("After f()")
}
Вывод будет таким
2020/07/20 23:14:07 Start first panic
2020/07/20 23:14:07 recover:1
2020/07/20 23:14:07 After f()