import "runtime/debug"
var mode string = "debug" // или не-debug
func main(){
//......
result, err := myFunc()if mode == "debug" { fmt.Println("result is:", result) if err !=nil { fmt.Println(err, string(debug.Stack())) }}
//......
}
--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
А никак не избавит, учитывая что нет препроцессора. Так что, судя по докам от проверок не избавится, но можно записать лаконично.
Я бы взял логгер с поддержкой уровней логирования. Structlog или logrus
if glog.V(2) { glog.Info("Starting transaction...") } glog.V(2).Infoln("Processed", nItems, "elements")
-v=0 Enable V-leveled logging at the specified level. -vmodule="" The syntax of the argument is a comma-separated list of pattern=N, where pattern is a literal file name (minus the ".go" suffix) or "glob" pattern and N is a V level. For instance, -vmodule=gopher*=3 sets the V level to 3 in all Go files whose names begin "gopher".
не надо никаких проверок, просто в зависимости от режима сообщение выводится в /dv/nill или например в stdout
Проверки, нужны, конечно. Eсли для того, чтобы сформировать строчку для лога, надо какие-то нетривиальные вычисления провести, то лучше их вообще не делать, если заранее ясно, что в лог она не попадёт. В Google мы используем другой модуль для логгирования: https://godoc.org/github.com/golang/glog. Чем он хорош - можно делать проверку уровня логгирования при помощи встроенных средств:if glog.V(2) { glog.Info("Starting transaction...") } glog.V(2).Infoln("Processed", nItems, "elements")Соответственно, программа принимает специальные флаги командной строки, чтобы регулировать детализацию логов:-v=0 Enable V-leveled logging at the specified level. -vmodule="" The syntax of the argument is a comma-separated list of pattern=N, where pattern is a literal file name (minus the ".go" suffix) or "glob" pattern and N is a V level. For instance, -vmodule=gopher*=3 sets the V level to 3 in all Go files whose names begin "gopher".
if glog.V(2) {
...
}
> он не будет тормозить, если эти ифы расставить через каждые три строчки?
тормозить он будет на логах, а не на ифах
--
Вы получили это сообщение, поскольку подписаны на группу Golang Russian.
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.