czy jest jakaś funkcja w ruchu, która jest podobna do "_file_"
lub w programie go, aby wiedzieć, kto wywołuje określoną funkcję w czasie wykonywania? W C mamy linię "_file_"
, którą można nazwać makrami. Jak to zrobić w podróży?_file_ lub _line_ podobne w golang
Odpowiedz
Jeśli używasz pakietu log
można polecić rejestratora do prefix the entries with various information. Najprawdopodobniej będziesz najbardziej zainteresowany stałą Lshortfile
, co spowoduje prefiksy zgodne z d.go:23
. Alternatywnie istnieje Llongfile
, która drukuje pełną ścieżkę pliku (np. /a/b/c/d.go:23
).
Jeśli nie chcesz korzystać z pakietu log
, możesz również użyć runtime.Caller()
, który jest używany przez pakiet dziennika wewnętrznie. Nie jest to tak proste jak makra C, ale można je ukryć za funkcją (i podać właściwą głębokość wywołania). Możesz na przykład see how the log package is implemented (linia 140).
być jawne: 'log.SetFlags (log.Lshortfile)' 'log.Println a następnie (" Błąd! ")' wypisze "myfile.go: 8: Błąd!" – 425nesp
Zobacz pakiety runtime
i runtime.debug
aw szczególności Stack
, PrintStack
lub Caller
functions.
Stos formatuje ślad stosu wywołującej goroutine do buf i zwraca liczbę bajtów zapisanych do buf. Jeśli wszystko jest prawdą, Stack formatuje ślady wszystkich innych goroutinów w buf po śladach aktualnej goroutine.
Jeśli kompilacji z informacjami debug, to wola powinna zawierać numer linii w źródle
(1) Napisz krótką funkcję, która wywołuje runtime.Caller()
(2) wywołać tą funkcję wszędzie chcesz uzyskać dostęp do pliku z kodem źródłowym i numer linii w czasie wykonywania.
przykład:
import "runtime"
func file_line() string {
_, fileName, fileLine, ok := runtime.Caller(1)
var s string
if ok {
s = fmt.Sprintf("%s:%d", fileName, fileLine)
} else {
s = ""
}
return s
}
Uwaga: podanie 1 do abonenta() tak, że powraca liczbę linii, gdzie file_line() jest wywoływana, a nie w którym runtime.Caller() jest wywoływana.
fmt.Println(file_line()) // Prints this file and line number.
- 1. Git i Trac (lub podobne)
- 2. xsl podobne lub rozmyte wyszukiwanie?
- 3. Konwersja ciąg json lub struktury w GoLang
- 4. Django lub podobne dla kompozytowych kluczy podstawowych
- 5. Golang. Co używać? http.ServeFile (..) lub http.FileServer (..)?
- 6. Jak wykryć onclick() lub podobne dla poszczególnych znaków w tekście?
- 7. Własności podobne do prywatnych w modelach lub widokach Backbone.js
- 8. golang: Czy istnieje sposób iteracji w określonym miesiącu lub tygodniu?
- 9. Konkursy podobne do Netflixa
- 10. Bezcielesnego funkcja w Golang
- 11. testing.M odzyskać w golang
- 12. drukowania "(cudzysłów) w GoLang
- 13. Gałązka: in_array lub podobne możliwe wewnątrz instrukcji if?
- 14. Czy są jakieś współrzędne UV (lub podobne) dla UIImageView?
- 15. Obsługa języków Dart async/oczekiwanie na styl programowania lub podobne?
- 16. Jak zaimplementować "podobne" w BigQuery?
- 17. Excel-podobne nagłówki w JavaScript
- 18. Ładowanie pakietu dynamicznie w golang
- 19. Systemy podobne do NakedObjects?
- 20. Jak sprawdzić, czy właściwość fasoli istnieje wygrać BeanUtils lub podobne?
- 21. Jak działają pakiety w golang
- 22. golang - jak pobrać plik w przeglądarce z serwera golang?
- 23. Tworzenie klienta TCP w golang
- 24. Tworzenie wykresu połączeń w golang
- 25. Podkatalogi Golang
- 26. Zaplanowane zadania (podobne do cron) w PHP
- 27. Czytanie pliku jednocześnie w Golang
- 28. Golang Określanie, czy * Plik wskazuje na plik lub katalog
- 29. Okno podobne do facebookowego czatu
- 30. biblioteka identyfikująca podobne obrazy
[Zobacz również] (http://stackoverflow.com/q/17543546/720999) – kostix