ホームページ > バックエンド開発 > Golang > Go は C/C の __FILE__ マクロや __LINE__ マクロなどのソース ファイル情報にどのようにアクセスしますか?

Go は C/C の __FILE__ マクロや __LINE__ マクロなどのソース ファイル情報にどのようにアクセスしますか?

Susan Sarandon
リリース: 2024-12-04 11:28:10
オリジナル
281 人が閲覧しました

How Does Go Access Source File Information Like C/C  's __FILE__ and __LINE__ Macros?

Go でのソース ファイル情報へのアクセス

C/C のような言語では、 __FILE__ マクロと __LINE__ マクロを使用して現在のファイルに簡単にアクセスでき、行番号。 Go も同様のメカニズムを提供していますか?

答え:

はい、Go はこの目的のために runtime.Caller 関数を提供します。呼び出しスタック内の呼び出し元フレームを指す uintptr 変数のスライスを返します。 fmt.Sprintf 関数を使用して、フレームからソース ファイル名と行番号情報を抽出できます。

import (
    "fmt"
    "runtime"
)

func main() {
    // Get the caller function information
    frames := runtime.Callers(1, 2)

    // Extract the source file name and line number
    fileName, line := getFileInfo(frames[0])
    fmt.Printf("Source file: %s, Line number: %d", fileName, line)
}

// Function to extract file name and line number from caller frame
func getFileInfo(f uintptr) (string, int) {
    // Extract the file name
    frame := runtime.Frame(f)
    return frame.File, frame.Line
}
ログイン後にコピー

さらに、runtime.Caller は、関数を呼び出すためのソース ファイル情報も提供できます。

// Get the caller function information
frames := runtime.Callers(2, 3) // Skip the main function and runtime.Callers

// Extract the source file name and line number
fileName, line := getFileInfo(frames[0])
fmt.Printf("Source file: %s, Line number: %d", fileName, line)
ログイン後にコピー

以上がGo は C/C の __FILE__ マクロや __LINE__ マクロなどのソース ファイル情報にどのようにアクセスしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート