GoLang + ChatGPT
👁 496↗ 4
Вчера общался с другом, который сейчас интенсивно изучает GoLang, так как хочет перейти на этот ЯП.
Попросил меня прособесить его. Начали с простой задачи в LiveCoding, в процессе которой необходимо было использовать
Switch Case оператор. И когда он начал рассказывать про этот оператор, я был весьма удивлен, что у него было несколько заблуждений по тому как работает область видимости. На что он мне сказал, что ему так сказал ChatGPT.
Мы специально задали вопрос в GPT-4o и в первом же ответе получили явное противоречие:
1. Переменная, объявленная в `switch`, доступна во всех `case`.
2. Переменные в `case` живут только внутри своего `case`, если они объявлены там.
3. Каждый `case` не создаёт отдельную область видимости, но можно использовать `{}` для создания блока.
4. Одна и та же переменная не может быть объявлена в разных `case`, если нет `{}`.
5. `fallthrough` не переносит переменные в следующий `case`.
Противоречие между 2 и 3 пунктом и как следствие ошибка в 4 пункте тоже.
Причем второй пункт корректен, что переменные объявленые внутри одного case не видны в других. Однако третий пункт сразу говорит о том, что case не создает отдельную область видимости и это можно исправить только костылем в виде выделенного блока {}. Следом говорится, что нельзя создавать переменные с одинаковыми именами внутри двух case, что является неправдой! Так как case создает отдельный scope видимости.
В качестве примера ошибки, он приводит этот вариант:
num := 2
switch num {
case 1:
msg := "One"
fmt.Println(msg) // msg доступна здесь
case 2:
msg := "Two" // Ошибка! msg уже объявлена в другом case
fmt.Println(msg)
}
Однако смею вас уверить, что это абсолютно рабочий код и никакой ошибки тут не будет, так как внутри каждого case используется свой scope, в отличие от C/C++/Java/JS/PHP в операторе switch-case нет необходимости использовать break, так как в Go запускается только блок с первым истинным условием и другие блоки уже будут проигнорированы.
Поэтому друзья, если вы все еще используете ChatGPT для обучения, я бы рекомендовал вам проверять любую информацию, которую он вам выдает.
!💬Telegram !📹 Youtube741