>백엔드 개발 >Golang >Go에서 발신자 정보를 어떻게 얻을 수 있나요?

Go에서 발신자 정보를 어떻게 얻을 수 있나요?

DDD
DDD원래의
2024-12-20 13:21:14705검색

How Can I Get Caller Information in Go?

GoLang에서 발신자 정보 얻기

GoLang에서 다른 함수를 호출한 함수에 대한 정보를 알아내는 것이 가능합니까? 아래 foo()와 같은 함수가 main()에서 호출되는 경우 어떻게 알 수 있나요?

func foo() {
    // Perform some actions
}

func main() {
    foo()
}

C#과 같은 일부 언어에서는 이를 검색하기 위해 CallerMemberName 속성과 같은 기능을 제공합니다. GoLang은 다른 접근 방식을 사용합니다.

해결책: Runtime.Caller

GoLang은 호출자에 대한 정보를 얻기 위해 Runtime.Caller 함수를 제공합니다. 구문은 다음과 같습니다.

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

예 1: 발신자 파일 이름 및 줄 번호 표시

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()
}

예 2: 런타임으로 세부 정보 수집. FuncForPC

더 자세한 정보를 원하시면 Runtime.Caller와 함께 Runtime.FuncForPC를 사용할 수 있습니다:

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()
}

위 내용은 Go에서 발신자 정보를 어떻게 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.