Сейчас я читаю книгу "Эффективный Go" (к сожалению так и не понял кто автор). Свои заметки по ней буду писать в этом посте 🤠
> В блоке import импортируются пакеты, сущности из которых можно использовать в своем файлике с кодом. Бывают ситуации, когда несколько пакетов, которые вы хотите использовать, имеют одинаковое имя. Это недопустимо и приведет к конфликту. Для избежания конфликтов, можно присваивать пакетам свои имена:
*Тыкни чтобы посмотреть картинку* / *Тыкни чтобы посмотреть картинку*
> Операторы break и continue могут принимать необязательную метку, чтобы указать, какую конструкцию завершить или продолжить (полезно когда надо пропустить итерацию внешнего цикла). В Go есть и goto, который можно использовать для того же, но его как то не любят.
> Операторы if и switch в Go могут принимать необязательный параметр инициализации. То есть по как в циклах в Си мы можем инициализировать переменную при объявлении цикла, так в Go мы можем инициализировать переменную при объявлении условия. И сразу проверить удовлетворяет она условию или нет.
*Тыкни чтобы посмотреть картинку* / *Тыкни чтобы посмотреть картинку*
> В switch нет fall through (автоматического перехода к следующему случаю). Т.е. не надо писать множество break'ов как в Си.
> В switch можно указать несколько значений для одного случая через запятую
*Тыкни чтобы посмотреть картинку*
> В Go есть тип Rune, представляющий из себя 1 Unicode символ.
> Оператор defer в Go откладывает выполнение функции (отложенной функции) до момента, когда вызывающая её функция завершится и начнёт возвращать результат. Так часто удобнее следить за освобождением ресурсов. К примеру: закрытие файла находится рядом с его открытием, что делает код более понятным, чем если бы закрытие было размещено в конце функции.
> В отличие от C , возвращать адрес локальной переменной в Go вполне допустимо; память, связанная с переменной, сохраняется после завершения функции.
> В Go есть похожая на enum штука, только более мощная. Нумерованный блок констант можно задать с помощью оператора iota.
*Тыкни чтобы посмотреть картинку*
> Каждый исходный файл может определить свою собственную функцию init без параметров, чтобы настроить всё необходимое состояние. init вызывается после того, как все объявления переменных в пакете инициализировали свои значения, а это происходит только после того, как все импортированные пакеты были инициализированы. Помимо инициализаций, распространённое использование функций init заключается в проверке или исправлении корректности состояния программы перед началом её реального выполнения.
> В блоке import импортируются пакеты, сущности из которых можно использовать в своем файлике с кодом. Бывают ситуации, когда несколько пакетов, которые вы хотите использовать, имеют одинаковое имя. Это недопустимо и приведет к конфликту. Для избежания конфликтов, можно присваивать пакетам свои имена:
*Тыкни чтобы посмотреть картинку* / *Тыкни чтобы посмотреть картинку*
> Операторы break и continue могут принимать необязательную метку, чтобы указать, какую конструкцию завершить или продолжить (полезно когда надо пропустить итерацию внешнего цикла). В Go есть и goto, который можно использовать для того же, но его как то не любят.
> Операторы if и switch в Go могут принимать необязательный параметр инициализации. То есть по как в циклах в Си мы можем инициализировать переменную при объявлении цикла, так в Go мы можем инициализировать переменную при объявлении условия. И сразу проверить удовлетворяет она условию или нет.
*Тыкни чтобы посмотреть картинку* / *Тыкни чтобы посмотреть картинку*
> В switch нет fall through (автоматического перехода к следующему случаю). Т.е. не надо писать множество break'ов как в Си.
> В switch можно указать несколько значений для одного случая через запятую
*Тыкни чтобы посмотреть картинку*
> В Go есть тип Rune, представляющий из себя 1 Unicode символ.
> Оператор defer в Go откладывает выполнение функции (отложенной функции) до момента, когда вызывающая её функция завершится и начнёт возвращать результат. Так часто удобнее следить за освобождением ресурсов. К примеру: закрытие файла находится рядом с его открытием, что делает код более понятным, чем если бы закрытие было размещено в конце функции.
> В отличие от C , возвращать адрес локальной переменной в Go вполне допустимо; память, связанная с переменной, сохраняется после завершения функции.
> В Go есть похожая на enum штука, только более мощная. Нумерованный блок констант можно задать с помощью оператора iota.
*Тыкни чтобы посмотреть картинку*
> Каждый исходный файл может определить свою собственную функцию init без параметров, чтобы настроить всё необходимое состояние. init вызывается после того, как все объявления переменных в пакете инициализировали свои значения, а это происходит только после того, как все импортированные пакеты были инициализированы. Помимо инициализаций, распространённое использование функций init заключается в проверке или исправлении корректности состояния программы перед началом её реального выполнения.
READ OTHER POSTS