В Go ведение журнала трассировки представляет собой уникальную задачу: минимизировать стоимость отключенных операторов журнала на критических путях. В отличие от C/C, в Go нет макросов препроцессора, поэтому необходимо искать альтернативные решения.
Один из подходов предполагает использование интерфейсов fmt.Stringer и fmt.GoStringer. Отложив форматирование до выполнения журнала, можно избежать дорогостоящих вызовов функций в аргументах журнала:
type LogFormatter interface { LogFormat() string } // Inside the logger if i, ok := i.(LogFormatter); ok { fmt.Println(i.LogFormat()) }
Другая стратегия — заменить регистратор во время выполнения с помощью интерфейса регистратора или во время сборки с использованием ограничений сборки. Однако для этого необходимо убедиться, что в аргументы журнала не вставлены дорогостоящие вызовы.
Третий вариант — определить сам Logger как логическое значение, уменьшив многословие и одновременно предоставив краткий способ управления журналированием:
type Log bool func (l Log) Println(args ...interface{}) { fmt.Println(args...) } var debug Log = false if debug { debug.Println("DEBUGGING") }
Наконец, можно изучить генерацию кода, хотя она не подходит для конфигурации во время выполнения. Используя gofmt -r или создавая файлы с использованием текста/шаблона, можно создавать отдельные сборки отладки для конкретных сценариев отладки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3