// личный канал‑лог
gavrilovlog
← все записи

GoLang + ChatGPT

👁 4964
Вчера общался с другом, который сейчас интенсивно изучает 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 !📹 Youtube
741