Home > Backend Development > Golang > How Can I Get Caller Information in Go?

How Can I Get Caller Information in Go?

DDD
Release: 2024-12-20 13:21:14
Original
705 people have browsed it

How Can I Get Caller Information in Go?

Obtaining Caller Information in GoLang

Is it feasible to determine information about the function that invoked another function in GoLang? If a function, such as foo() below, is called from main(), how can we find out?

func foo() {
    // Perform some actions
}

func main() {
    foo()
}
Copy after login

While some languages, such as C#, provide features like the CallerMemberName attribute to retrieve this data, GoLang employs a different approach.

Solution: runtime.Caller

GoLang offers the runtime.Caller function for acquiring information about the caller. Here's its syntax:

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
Copy after login

Example 1: Displaying Caller File Name and Line Number

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    _, file, no, ok := runtime.Caller(1)
    if ok {
        fmt.Printf("Called from %s#%d\n", file, no)
    }
}

func main() {
    foo()
}
Copy after login

Example 2: Gathering Detailed Information with runtime.FuncForPC

For more comprehensive information, you can use runtime.FuncForPC in conjunction with runtime.Caller:

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    pc, _, _, ok := runtime.Caller(1)
    details := runtime.FuncForPC(pc)
    if ok && details != nil {
        fmt.Printf("Called from %s\n", details.Name())
    }
}

func main() {
    foo()
}
Copy after login

The above is the detailed content of How Can I Get Caller Information in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template