История изменений
Исправление kaldeon, (текущая версия) :
Тут тоже можно предложить другое решение:
func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
}(func() {
// war and peace
})
На практике я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то при панике строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится (не приводит нас к обходу логирования), вывод один - паника.
Исправление kaldeon, :
Тут тоже можно предложить другое решение:
(func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
})(func() {
// war and peace
})
На практике я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то при панике строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится (не приводит нас к обходу логирования), вывод один - паника.
Исправление kaldeon, :
Тут тоже можно предложить другое решение:
(func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
})(func() {
// war and peace
})
На практике, конечно, я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то при панике строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится (не приводит нас к обходу логирования), вывод один - паника.
Исправление kaldeon, :
Тут тоже можно предложить другое решение:
f := func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
}
f(func() {
// war and peace
})
На практике, конечно, я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то при панике строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится (не приводит нас к обходу логирования), вывод один - паника.
Исправление kaldeon, :
Тут тоже можно предложить другое решение:
f := func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
}
f(func() {
// war and peace
})
На практике, конечно, я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то при панике строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится, вывод один - паника.
Исходная версия kaldeon, :
Тут тоже можно предложить другое решение:
f := func(g func()) {
start := 0
g()
end := 42
fmt.Println(end - start)
}
f(func() {
// war and peace
})
На практике, конечно, я такие чудеса ещё не писал. Выглядит странновато.
Но тут если сравнивать с defer, то кроме громоздкости будет разная корректность. В случае с defer в лог запишется 0, даже если (сложный) запрос не отработал и упал. И мы, видя 0, не сможем узнать причину глядя на код. Смотря на код, никто не думает о панике, все смотрят на следующее выражение.
Если же использовать мой пример, то строчки в логе не будет. Это тоже вводит в заблуждение, но в отличие от 0 мы сможем отследить логику программы по коду: если control flow не сходится, вывод один - паника.