Отображение валюты на сайте:

    Go (часто также Golang) — компилируемый многопоточный язык программирования, разработанный компанией Google.

    file

    Язык Go разрабатывался как язык программирования для создания высокоэффективных программ, работающих на современных распределённых системах и многоядерных процессорах.

    Предполагается, что программы на Go будут транслироваться компилятором в объектный код целевой аппаратной платформы и в дальнейшем исполняться непосредственно, не требуя виртуальной машины. Архитектура языка изначально проектировалась так, чтобы обеспечить быструю компиляцию в эффективный объектный код. Хотя для Go доступен и интерпретатор, практически в нём нет большой потребности, так как скорость компиляции достаточно высока для обеспечения интерактивной разработки.

    Основные возможности языка Go:

    • Go — язык со строгой статической типизацией. Доступен автоматический вывод типов, для пользовательских типов — «утиная типизация».
    • Полноценная поддержка указателей, но без возможности применять к ним арифметические операции, в отличие от C/C++/D.
    • Строковый тип со встроенной поддержкой юникода.
    • Использование динамических массивов, хэш-таблиц, срезов (слайсов), вариант цикла для обхода коллекции.
    • Средства функционального программирования: неименованные функции, замыкания, передача функций в параметрах и возврат функциональных значений.
    • Автоматическое управление памятью со сборщиком мусора.
    • Средства объектно-ориентированного программирования, но без поддержки наследования реализации (наследуются только интерфейсы). По большому счёту, Go является процедурным языком с поддержкой интерфейсов.
    • Средства параллельного программирования: встроенные в язык потоки (go routines), взаимодействие потоков через каналы и другие средства организации многопоточных программ.
    • Достаточно лаконичный и простой синтаксис, основанный на Си, но существенно доработанный, с большим количеством синтаксического сахара.

    При этом в язык сознательно не был включён ряд популярных средств.

    • Структурная запись обработчиков исключений сочтена провоцирующей на пропуск ошибок или неадекватную их обработку. Вместо неё предлагается проверка кодов возврата с использованием многозначных функций и специального интерфейса error, а также применение отложенных (deferred) функций для перехвата исключительных ситуаций.
    • Наследование реализации, как считают авторы, приводит к трудноподдерживаемому коду с неявными зависимостями. Аналогичные возможности, но без свойственных наследованию нежелательных эффектов, обеспечиваются поддержкой вложения типов и свободно определяемыми интерфейсами.
    • Обобщённое программирование. Авторы не являются принципиальными противниками обобщённого программирования и не исключают добавление его средств в язык, однако пока от этого воздерживались, поскольку, по их словам[3], предоставляемые таким нововведением возможности не окупают требуемого усложнения компилятора и runtime-библиотек. К тому же уже имеющиеся в языке средства (пустые интерфейсы, «утиная типизация» и рефлексия) позволяют создавать обобщённый код без специальных синтаксических механизмов.
    • Использование утверждений было сочтено ненужным.
    • Переопределение методов и функций было исключено из соображений эффективности компиляции: требование различного именования устраняет необходимость сопоставлять списки параметров при компиляции вызовов функций и методов, при том что сама эта возможность есть не более чем синтаксический сахар.

    go 1.9 — добавлены в язык псевдонимы имён типов, уточнены некоторые моменты использования операций с плавающей точкой, оптимизирован инструментарий, дополнение библиотек, в частности — потоково-безопасный тип map.