>백엔드 개발 >Golang >Go Code에서 현재 함수 이름을 어떻게 얻을 수 있나요?

Go Code에서 현재 함수 이름을 어떻게 얻을 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-15 08:45:14737검색

How Can I Get the Current Function Name in Go Code?

Go 코드 검사: 현재 함수 이름 검색

Go에서 현재 함수 이름을 얻는 것은 디버깅 및 추적에 매우 중요합니다. gcc의 FUNCTION 매크로는 이 기능을 제공하며 우리는 이를 Go에서 에뮬레이션하는 것을 목표로 합니다.

해결책

핵심은 런타임 패키지에 있습니다. 해결 방법은 다음과 같습니다.

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.Callers(2, pc)
    f := runtime.FuncForPC(pc[0])
    file, line := f.FileLine(pc[0])
    fmt.Printf("%s:%d %s\n", file, line, f.Name())
}

이 기능의 작동 방식은 다음과 같습니다.

  1. 프로그램 카운터(PC) 얻기: Runtime.Callers를 사용하여 PC를 검색합니다. 현재 함수 및 호출 스택 프레임. 추적 기능 자체를 건너뛰기 위해 깊이를 2로 지정합니다.
  2. 함수 세부정보 검색: Runtime.FuncForPC를 사용하여 PC에 해당하는 Func 개체를 검색합니다. 이 객체는 함수 이름, 줄 번호 및 파일 이름에 대한 액세스를 제공합니다.
  3. 함수 정보 인쇄: 마지막으로 함수의 파일 이름, 줄 번호 및 이름을 인쇄합니다.

업데이트된 예

Go 버전 1.7의 경우 권장되는 접근 방식은 런타임.FuncForPC 대신 런타임.CallersFrames를 사용하는 것입니다. 아래의 업데이트된 예:

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.CallersFrames(2, pc)
    frame, _ := runtime.CallersFrames(2, pc)
    fmt.Printf("%s:%d %s\n", frame[0].File, frame[0].Line, frame[0].Function)
}

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

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