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()) }
この関数は次のように動作します:
更新された例
Go バージョン 1.7 の場合、推奨されるアプローチは、runtime.FuncForPC の代わりに runtime.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 コードで現在の関数名を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。