Тип runtime.Func
Тип runtime.Func представляет функцию в рантайме Go. Он используется для получения информации о функции во время выполнения программы. Основное применение этого типа связано с получением имени функции и её исходного кода. Тип runtime.Func возвращается функцией runtime.FuncForPC, которая принимает указатель на программный счетчик (program counter) и возвращает соответствующий объект runtime.Func.
Синтаксис
Тип runtime.Func определяется следующим образом:
type Func struct {
// содержит скрытые поля
}
Основные методы типа runtime.Func:
func (f *Func) Name() string
func (f *Func) Entry() uintptr
func (f *Func) FileLine(pc uintptr) (file string, line int)
Пример
Давайте получим информацию о текущей функции с помощью runtime.Func:
package main
import (
"fmt"
"runtime"
)
func main() {
pc, _, _, _ := runtime.Caller(0)
fn := runtime.FuncForPC(pc)
fmt.Println(fn.Name())
}
Результат выполнения кода:
"main.main"
Пример
Давайте получим имя и точку входа для функции:
package main
import (
"fmt"
"runtime"
)
func testFunc() {
fmt.Println("test function")
}
func main() {
pc := reflect.ValueOf(testFunc).Pointer()
fn := runtime.FuncForPC(pc)
fmt.Println(fn.Name())
fmt.Println(fn.Entry())
}
Результат выполнения кода:
"main.testFunc"
"17445632"
Пример
Давайте получим информацию о файле и строке для определенного программного счетчика:
package main
import (
"fmt"
"runtime"
)
func main() {
pc := make([]uintptr, 1)
runtime.Callers(1, pc)
fn := runtime.FuncForPC(pc[0])
file, line := fn.FileLine(pc[0])
fmt.Println(file)
fmt.Println(line)
}
Результат выполнения кода:
"/tmp/main.go"
"9"
Смотрите также
-
функцию
runtime.Caller,
которая возвращает информацию о вызывающей функции -
функцию
runtime.Callers,
которая заполняет срез программными счетчиками -
функцию
runtime.FuncForPC,
которая возвращает объектruntime.Funcдля программного счетчика -
тип
runtime.Frame,
который представляет фрейм стека вызовов