Функция log.Panicf
Функция log.Panicf форматирует сообщение по заданному шаблону,
выводит его в стандартный логгер и вызывает панику с этим же сообщением.
Первый параметр функции - строка формата, второй и последующие -
аргументы для форматирования. После вызова log.Panicf выполнение
программы останавливается, а паника распространяется по стеку вызовов,
если не была перехвачена механизмом восстановления.
Синтаксис
log.Panicf(format string, v ...interface{})
Функция принимает строку формата и переменное количество аргументов,
подобно fmt.Printf. Строка формата может содержать
спецификаторы для вставки значений различных типов.
Пример
Давайте вызовем панику с форматированным сообщением:
package main
import (
"log"
)
func main() {
name := "Alice"
age := 30
log.Panicf("User %s is %d years old", name, age)
}
Результат выполнения кода:
"2026/01/15 14:30:45 User Alice is 30 years old"
Программа выведет сообщение в лог и завершится с паникой.
Пример
Если необходимо вывести значение ошибки вместе с дополнительной информацией:
package main
import (
"log"
"strconv"
)
func main() {
value := "abc"
num, err := strconv.Atoi(value)
if err != nil {
log.Panicf("Failed to convert '%s' to int: %v", value, err)
}
log.Printf("Converted number: %d", num)
}
Результат выполнения кода:
"2026/01/15 14:30:46 Failed to convert 'abc' to int: strconv.Atoi: parsing \"abc\": invalid syntax"
В этом примере при ошибке конвертации выводится детальное сообщение, а программа завершается паникой.
Пример
Покажем, как перехватить панику с помощью recover:
package main
import (
"fmt"
"log"
)
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("Recovered from panic: %v\n", r)
}
}()
log.Panicf("Critical error: %s", "database connection lost")
fmt.Println("This line will not be executed")
}
Результат выполнения кода:
"2026/01/15 14:30:47 Critical error: database connection lost"
"Recovered from panic: Critical error: database connection lost"
Сообщение сначала попадает в лог, затем паника перехватывается в отложенной функции, и программа продолжает выполнение.
Смотрите также
-
функцию
log.Panic,
которая выводит сообщение и вызывает панику без форматирования -
функцию
log.Panicln,
которая выводит сообщение с пробелами между аргументами и вызывает панику -
функцию
log.Fatalf,
которая выводит форматированное сообщение и завершает программу без паники -
функцию
log.Printf,
которая выводит форматированное сообщение без остановки программы