_file_ oder _line_ ähnlich in Golang

8

Gibt es irgendeine Funktion in go, die ähnlich wie "_file_" oder "_line_" in go ist, um zu wissen, wer während der Laufzeit eine bestimmte Funktion aufruft? In C haben wir die "_file_" -Zeile, die als Makros aufgerufen werden kann. Wie geht das in gehen?

    
heike 14.07.2013, 14:39
quelle

3 Antworten

14

Wenn Sie das Paket log verwenden, können Sie den Logger anweisen, die Einträge mit verschiedenen Informationen zu versehen . Sie werden wahrscheinlich am meisten an der Konstante Lshortfile interessiert sein, die zu Präfixen in der Art d.go:23 führt. Alternativ gibt es Llongfile , das den vollständigen Pfad der Datei ausgibt (z. B. /a/b/c/d.go:23 ).

Wenn Sie das log -Paket nicht verwenden möchten, können Sie auch runtime.Caller() verwenden. Das ist, was das Protokollpaket intern verwendet. Es ist nicht so einfach wie die C-Makros, aber Sie können es hinter einer Funktion verbergen (und die korrekte Aufruftiefe angeben). Sie können sehen, wie das Protokollpaket implementiert wird für ein Beispiel (Zeile 140).

    
Kitsune 14.07.2013, 14:52
quelle
7

(1) Schreiben Sie eine kurze Funktion, die runtime.Caller ()

aufruft

(2) Rufen Sie diese Funktion überall auf, wenn Sie zur Laufzeit auf die Quellcodedatei und die Zeilennummer zugreifen möchten.

Beispiel:

%Vor%

Hinweis: übergeben Sie 1 an Caller (), so dass es die Nummer der Zeile zurückgibt, in der file_line () aufgerufen wird, anstelle von wo runtime.Caller () aufgerufen wird.

%Vor%     
Koala3 13.10.2015 02:51
quelle
2

Siehe die Pakete runtime und runtime.debug und insbesondere die Funktionen Stack , PrintStack oder Caller .

  

Stack formatiert einen Stack-Trace der aufrufenden Goroutine in buf und gibt die Anzahl der Bytes zurück, die auf buf geschrieben wurden. Wenn alles wahr ist, stapelt das Stack-Format die Spuren aller anderen Goroutinen nach dem Trace für die aktuelle Goroutine in buf.

Wenn Sie mit Debug-Informationen kompilieren, sollte dies die Zeilennummer in der Quelle

enthalten     
Jeff Foster 14.07.2013 14:48
quelle

Tags und Links