ホームページ >バックエンド開発 >Golang >Go で発信者情報を取得するにはどうすればよいですか?

Go で発信者情報を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-20 13:21:14704ブラウズ

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.FuncForPC を 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()
}
と組み合わせて使用​​できます

以上がGo で発信者情報を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。