РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1557 of 1593 menu

Функция runtime.Caller

Функция runtime.Caller позволяет получить информацию о вызывающем коде. Она возвращает номер программного счетчика, имя файла и номер строки, где произошел вызов этой функции. Параметр skip указывает, сколько уровней стека нужно пропустить вверх по цепочке вызовов: значение 0 возвращает информацию о самой функции runtime.Caller, 1 - о ее вызывающем, и так далее.

Синтаксис

pc, file, line, ok := runtime.Caller(skip int)

Пример

Давайте получим информацию о текущем вызове функции runtime.Caller:

package main import ( "fmt" "runtime" ) func main() { pc, file, line, ok := runtime.Caller(0) if ok { fmt.Printf("pc: %v, file: %s, line: %d", pc, file, line) } }

Результат выполнения кода:

"pc: 17478419, file: /path/to/main.go, line: 10"

Пример

Давайте создадим вспомогательную функцию для логирования, которая будет показывать место вызова:

package main import ( "fmt" "runtime" ) func logMessage(msg string) { pc, file, line, ok := runtime.Caller(1) if ok { fmt.Printf("[%s:%d] %s", file, line, msg) } } func main() { logMessage("Hello, World!") }

Результат выполнения кода:

"[/path/to/main.go:15] Hello, World!"

Пример

Давайте используем функцию для получения информации о вызывающем коде через несколько уровней вложенности:

package main import ( "fmt" "runtime" ) func level3() { pc, file, line, ok := runtime.Caller(2) if ok { fmt.Printf("Caller from level3: %s:%d", file, line) } } func level2() { level3() } func level1() { level2() } func main() { level1() }

Результат выполнения кода:

"Caller from level3: /path/to/main.go:22"

Смотрите также

  • функцию runtime.Callers,
    которая заполняет срез адресами программных счетчиков вызывающих функций
  • функцию runtime.FuncForPC,
    которая возвращает информацию о функции по адресу программного счетчика
  • функцию runtime.Stack,
    которая возвращает текущий стек вызовов в виде среза байтов
  • тип runtime.Frame,
    который представляет один фрейм в стеке вызовов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить