megakor
@megakor
Go/PHP developer | Вконтакте

Всегда ли нужно переиспользовать переменные?

db, err := sql.Open("sqlite3", dsn)
if err != nil {
    return nil, errors.Wrap(err, "cannot open database")
}

// ВАРИАНТ 1:
if err = db.Ping(); err != nil {
    return nil, errors.Wrap(err, "cannot ping database")
}

// ВАРИАНТ 2:
if err := db.Ping(); err != nil {
    return nil, errors.Wrap(err, "cannot ping database")
}


Какой вариант предпочтительнее?
Я всегда думал что первый, потому что мы переиспользуем переменную, объявленную выше и нам не надо аллоцировать память под новую. Главное чтобы все было в одном потоке.

Но очень часто вижу второй вариант у всяких людей, которые являются "идолами" в Го сфере.

Есть какие-то ньюансы почему второй вариант лучше?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
Оба примера - одинаковы по смыслу поэтому можно брать любой.

Но если-бы я писал это на Rust/Scala то я всегда предпочитал бы константу. Ибо идеология и доказуемость значения в константе важнее гипотетических performance fixes.

В данном случае - я все равно не специалист в Go и поэтому исходил бы из best practices и рекомендаций от самих создателей. Что они пишут по обработке ошибок? Дают ли они примеры? Вот если они в документации шлёпнут хотя-бы один сниппет с присвоением константы - то я скажу Окей мне все ясно и пойду писать код.

Где там идолы что пишут у себя в pet-projects - надо смотреть.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист

Я всегда думал что первый, потому что мы переиспользуем переменную, объявленную выше и нам не надо аллоцировать память под новую

Компилятор достаточно умный, чтобы увидеть такое и переиспользовать пространство на стеке.

2й вариант мне нравится больше, тк не нужно задумываться, объявил ты ранее переменную с таким именем или нет - просто всегда пишешь :=
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы